【问题标题】:php pdo bind_param error [closed]php pdo bind_param错误[关闭]
【发布时间】:2015-01-31 20:19:48
【问题描述】:

我在插入表格时遇到了错误

JSON:

{"machine":"1","postage":"1","tracking":"1","lve":"1","notice":"4","content":"12","refresh":"1","location":"cityname"}

我怎样才能做到这一点?

谢谢

编辑 修复了你们提到的错误

function addOptions ($postData, $dbh) {

//print_r($postData);
$result = json_decode($postData);
//$location = $result->location;
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO options (location, display_time ,content_time, refresh_time, machine_data, postage_data, tracking_data, lve_data) 
                    VALUES (:location, :display_time, :content_time, :refresh_time, :machine_data, :postage_data, :tracking_data, :lve_data) 
                    ON DUPLICATE KEY UPDATE 
                    display_time= :display_time, refresh_time= :refresh_time, machine_data= :machine_data, content_time= :content_time, postage_data= :postage_data, tracking_data= :tracking_data, lve_data= :lve_data";
$preparedStatement = $dbh->prepare($sql);
$preparedStatement->bindParam(':location', $result->location);
$preparedStatement->bindParam(':display_time', $result->display);
$preparedStatement->bindParam(':content_time', $result->content);
$preparedStatement->bindParam(':refresh_time', $result->refresh);
$preparedStatement->bindParam(':machine_data', $result->machine);
$preparedStatement->bindParam(':postage_data', $result->postage);
$preparedStatement->bindParam(':tracking_data', $result->tracking);
$preparedStatement->bindParam(':lve_data', $result->lve);
$preparedStatement->execute();

}

现在我收到此错误消息

警告:PDOStatement::execute() 期望参数 1 是数组,字符串在 D:\xampp\htdocs\admin\include\function.php 第 186 行给出

【问题讨论】:

  • 你好像忘了打电话给$preparedStatement = $dbh->prepare($sql);
  • 这并不能完全解释为什么它抱怨布尔值而不是非对象或未定义的变量。是否还有更多代码没有显示?
  • 你在哪里给prepareStatement打电话?
  • 哦,我只是向右滚动---。 INSERT 语句永远不会有 WHERE 子句,因为它只能添加新行。这应该是UPDATE
  • 设置您的 PDO 连接以抛出有用的错误。默认情况下,PDO 会默默地出错。 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

标签: php json pdo


【解决方案1】:

你忘了创建准备好的语句,在绑定参数之前试试这个:

$preparedStatement = $dbh->prepare($sql);

编辑:

只需改变这个:

(既然你已经绑定了参数,你就可以执行查询了!否则执行的参数将包含准备语句的参数)

$preparedStatement->execute($sql);

到这里:

$preparedStatement->execute();

有关 PDO execute() 命令的更多信息,请参阅手册:http://php.net/manual/en/pdostatement.execute.php

还有一段话:

public bool PDOStatement::execute ([ 数组 $input_parameters ] )

【讨论】:

  • 这里发生的事情比 OP 发布的要多。一定有,因为变量甚至都没有被定义,而且 SQL INSERT 语法很混乱。
  • @MichaelBerkowski 是的,你可能是对的! (只需阅读您对 WHERE 子句的评论,这很奇怪)
【解决方案2】:

几个错误:

  1. 添加 pdo 准备:

    $preparedStatement = $dbh->prepare($sql);
    
  2. 把你所有的 bind_param 改成这个:

    $preparedStatement->bindParam(':display', $result->display);
    
  3. 将执行添加到 if 条件中,以便查看它是否有效:

    if( $preparedStatement->execute() === FALSE){
    
       Throw new \Exception('Bad query insertion!');
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    相关资源
    最近更新 更多