【问题标题】:php pdo bind parameter not workingphp pdo绑定参数不起作用
【发布时间】:2012-03-23 06:49:52
【问题描述】:

我正在使用以下 php pdo 代码将数据插入 mysql 数据库,插入成功,但是,更新后的数据库将字符串文字 ':a'、':b' 分别显示为字段中的值。怎么了?

$数据 = 数组( 数组('a' => '约翰','b' => 'OK'), ); $st=$dbh->prepare("插入 mytable (a, b) 值(':a', ':b')"); $st->execute($data) 或 print_r($st->errorInfo());

【问题讨论】:

    标签: mysql pdo


    【解决方案1】:

    从占位符中删除引号。否则,它们被视为字符串文字并直接插入。

    $st=$dbh->prepare("insert into mytable (a, b) values(:a, :b)");
    

    并删除数组上的嵌套:

    // $data is an associative array, it should not contain another array!
    $data = array('a' => 'John', 'b' => 'OK');
    

    为了保持一致,我更喜欢在占位符数组键上使用:

    $data = array(':a' => 'John', ':b' => 'OK');    
    

    【讨论】:

    • 现在我得到 $st->errorInfo() 显示没有详细的错误消息:Array ( [0] => HY093 [1] => [2] => )
    • @user121196 我现在看到了 - 你有一个嵌套数组 $data,它应该是一个数组。见上面的补充。
    • 我花了将近 12 个小时来尝试解决这个错误。谢谢你,@MichaelBerkowski!
    【解决方案2】:

    您需要在 sql 和参数中定义相同的数组,您缺少“:”。你也不需要两个数组,只需要一个。

    $data = array(':a' => 'John', ':b' => 'OK');
    

    查询也不需要引号,因为 PDO 已经知道它是一个参数

    $st=$dbh->prepare("insert into mytable (a, b) values(:a, :b)");
    $st->execute($data) or print_r($st->errorInfo());
    

    【讨论】:

    • 我相信实际使用或使用:,即使它没有记录。
    • @Developer:我试过用 :,它没有任何区别.. 实际上我使用了 $st->bindParam(":a", "test"),它没有有什么不同...
    • 去掉参数 values(:a, :b) 而不是 values(':a', ':b') 中的引号
    • 因为你的参数是一个嵌套数组,你只需要一个数组
    【解决方案3】:

    您正在使用命名占位符执行准备好的语句。因此,您需要从占位符中删除引号,否则它们将被视为相应列的值并直接更新。

    为了保持一致,我更喜欢在占位符数组键上使用 ::

    $data = array(':a' => 'John', ':b' => 'OK'); 
    
    $st=$dbh->prepare("insert into mytable (a, b) values(:a, :b)");
    

    您还可以使用问号占位符执行准备好的语句:

    $data = array(
      array('John','OK'),
    
    );
    $st=$dbh->prepare("insert into mytable (a, b) values(?, ?)");
    $st->execute($data) or print_r($st->errorInfo());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 2011-08-27
      • 2020-09-05
      • 2015-06-10
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多