【问题标题】:Custom PDO Class Errors自定义 PDO 类错误
【发布时间】:2012-08-11 21:11:42
【问题描述】:

编辑:原来我一直在叫错树,所以 说话。我已经编辑了这个问题,使其至少对其他人有用 谁得到了错误。

对于所有在尝试执行准备好的 PDO 查询时遇到以下错误的人:

警告:PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]:参数号无效:参数未定义 第 26 行

请看下面我的回答。

【问题讨论】:

  • 为什么人们似乎觉得 OO DB 驱动程序需要包装类?他们已经类。如果您必须更改它们的工作方式,请扩展它们,而不是将它们包装在某些东西中。第 26 行是哪一行?
  • 另外请不要省略花括号。它只会损害可读性。
  • @PeeHaa 无论哪种方式都可以。我从不在传递给 execute() 的键中使用前导 :s。
  • @PeeHaa:感谢您的回复,但仍然无法正常工作。
  • 您是否在第 26 行之前验证了$query $data 的值?

标签: php pdo


【解决方案1】:

如果我错了,请纠正我,但您不应该对参数数组使用以下语法:

array(':id' => 1)

请注意原始帖子中省略的冒号。

有关示例,请参阅PDO docs

【讨论】:

    【解决方案2】:

    这意味着您在 $query->execture($array) 中传递的数组值比在查询中传递的 :values 更多。如果您遇到类似但措辞不同的错误,则表示查询中的:values 比数组中的多。例如:

    $array = array(
      'username' => 'Bob',
      'id' => 42,
    );
    
    //...
    
    $query = "SELECT * FROM `users` WHERE `id`=:id";
    
    //...
    
    $data->execute($array);
    

    这会产生错误,因为尽管您传递的是“用户名”,但它从未在查询中使用。希望这对某人有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多