【问题标题】:PDO statement with insert带插入的 PDO 语句
【发布时间】:2016-03-02 06:41:01
【问题描述】:

我收到一条错误消息:

[Sat Nov 28 08:07:29.066118 2015] [:error] PHP 2. PDOStatement->execute() /home/www/Files/direct_download.php:213,引用:Listen-1.html

$db_host = 'localhost';
$db_user = 'dbuser';
$db_passwd = 'passwd';
$db_name = 'dbname';
$db_charset = 'utf8';

    $connexion = new PDO('mysql:host='.$db_host.';dbname='.$db_name, $db_user, $db_passwd
        , array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES '.$db_charset.'')); //SET NAMES utf8
$connexion->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);

// Insert into downloads table to track downloads
try {               
$addDownload = $connexion->prepare("INSERT INTO `downlads` (`idd`, 
    `rub`, 
    `srub`, 
    `cat`, 
    `scat`, 
    `menu`, 
    `type`, 
    `action`, 
    `num`, 
    `randkey`, 
    `person_ip`, 
    `when`) 
    VALUES (NULL, :rub, :srub, :cat, :scat, :menu, :type, :action, :num, :rand, :ip, :when)");

 $addDownload->execute(array(
            $rub, $srub, $cat, $scat, $menu, $type, $action, $num, $randKeys, $ip_visiteur, $DateTime));                
} catch(PDOException $e) {
    echo $e->getMessage();
}               

但我不知道错误在哪里

【问题讨论】:

  • 这些值从哪里定义 $rub, $srub, $cat...... 并且 idd 是表中的主键???
  • idd 是我的主键,我删除了它但仍然是同样的错误
  • 试试INSERT INTO downlads` (rub, srub, cat, scat, menu, type, action, @987654333333 @, person_ip, when) 值 (?,?,?,?,?,?,?,?,?,?,?)"); $addDownload->execute(array( $rub, $srub , $cat, $scat, $menu, $type, $action, $num, $randKeys, $ip_visiteur, $DateTime)); `

标签: php pdo insert


【解决方案1】:

尝试在execute 语句中定义null。或者试试这个

$addDownload = $connexion->prepare("INSERT INTO `downlads` (`idd`, 
`rub`, 
`srub`, 
`cat`, 
`scat`, 
`menu`, 
`type`, 
`action`, 
`num`, 
`randkey`, 
`person_ip`, 
`when`) 
VALUES (:null, :rub, :srub, :cat, :scat, :menu, :type, :action, :num, :rand, :ip, :when)");

并且也尝试像这样使用它

 $addDownload->execute(array(
        ':null'=>NULL,':rub'=>$rub, ':srub'=>$srub, ':cat'=>$cat, ':scat'=>$scat, ':menu'=>$menu, ':type'=>$type, ':action'=>$action, ':num'=>$num, ':rand'=>$randKeys, ':ip'=>$ip_visiteur, ':when'=>$DateTime));

【讨论】:

  • 我删除了 null 仍然是一样的错误: $addDownload->execute(array( ':rub'=>$rub, ':srub'=>$srub, ':cat' =>$cat, ':scat'=>$scat, ':menu'=>$menu, ':type'=>$type, ':action'=>$action, ':num'=>$num, ':rand'=>$randKeys, ':ip'=>$ip_visiteur, ':when'=>$DateTime));
  • 现在尝试使用它,因为我已经对其进行了编辑。如果它仍然保持不变,那么我很确定问题出在您的日期变量或数据库中的数据类型上。
【解决方案2】:

通过PDO statement

您的代码将如下所示:-

try {      
$addDownload = $connexion->prepare("INSERT INTO `downlads` ( 
    `rub`, 
    `srub`, 
    `scat`) 
    VALUES (:rub, :srub, :scat)");
            $addDownload->bindParam(':rub', $rub, PDO::PARAM_STR, 100);
            $addDownload->bindParam(':srub', $srub, PDO::PARAM_STR, 100);
            $addDownload->bindParam(':scat', $cat, PDO::PARAM_STR, 100);

     $addDownload->execute();                

} catch(PDOException $e) {
    echo $e->getMessage();
}

【讨论】:

  • 我遇到了这个错误 [Tue Dec 01 06:39:41.510312 2015] [:error] [pid 19826] [client 105.132.98.12:55267] PHP 2. PDOStatement->execute() direct_download.php:206,我用截图编辑了我的第一条消息
  • 100 代表什么? $addDownload->bindParam(':rub', $rub, PDO::PARAM_STR, 100);
  • 它是数据类型的长度。即长度为100的PDO参数字符串(PDO::PARAM_STR, 100)。
猜你喜欢
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 2013-05-19
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 2012-05-05
相关资源
最近更新 更多