【问题标题】:Is necessary to bind params after each prepare in PDO?在 PDO 中每次准备后是否需要绑定参数?
【发布时间】:2016-09-29 04:34:16
【问题描述】:

我有以下关于 PDO 的问题:

如果我要执行多个查询,每次调用 prepare 时都需要使用 bindParam 方法吗?

例子:

$connection->prepare( "SELECT * FROM table WHERE y = :y" );
$connection->bindParam( ":y", $y );

$connection->prepare( "SELECT * FROM table2 WHERE y = :w" );
$connection->bindParam( ":w", $w );

或者我可以使用以下方法做得更好:

$connection->bindParam( ":y", $y );
$connection->bindParam( ":w", $w );

$connection->prepare( "SELECT * FROM table WHERE y = :y" );
$connection->prepare( "SELECT * FROM table2 WHERE y = :w" );

或者:

$connection->prepare( "SELECT * FROM table WHERE y = :y" );
$connection->prepare( "SELECT * FROM table2 WHERE y = :w" );

$connection->bindParam( ":y", $y );
$connection->bindParam( ":w", $w );

哪种顺序和什么是可能的?

【问题讨论】:

  • 您不会在单次执行时执行多个查询。您需要每个查询,绑定参数并为每个查询单独执行
  • 这些都不行。 prepare 的返回是一个准备好的语句。 bindParam 是与 statement 关联的方法,而不是与 connection 关联的方法。当调用语句execute 方法时,将评估绑定到占位符的变量的值。我建议您查看 PDO 文档以获取示例。
  • 如果您需要使用相同的参数执行多个查询,这意味着您的数据库设计很可能是错误的。只需为所有类似数据创建一个表,因此您只需要运行一个查询即可。
  • 如果绑定每个参数的工作量很大,您可以将带有参数的数组传递给stmtexecute 方法

标签: php mysql pdo


【解决方案1】:

当您bind params 时,您将它们绑定到准备好的语句而不是连接,所以这实际上不起作用

$connection->bindParam( ":w", $w );

相反,您需要这样做:

$stmt = $connection->prepare( "SELECT * FROM table2 WHERE y = :w" );
$stmt->bindParam( ":w", $w );

这自动意味着您需要为每个语句单独绑定参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2016-05-06
    • 2016-09-04
    • 1970-01-01
    • 2017-09-07
    相关资源
    最近更新 更多