php - 如何在 PHP 中为动态查询构建参数化 PDO 语句?

标签 php mysql pdo sql-injection

如果有人问过这个问题,我们深表歉意。我已经看到有关静态 SQL 的答案,但在这种情况下,我想将 PDO->prepare() 用于在运行时动态构建的查询字符串。

分解成一个简单的例子:

$TempSQL = "SELECT field1, field2, field3 FROM table WHERE ";

if ($numberParams == 1) {
    $TempSQL = $TempSQL . " field1 = '$val1' ";
} else {
    $TempSQL = $TempSQL . " field2 = '$val2' ";
    $TempSQL = $TempSQL . " AND field3 = '$val3' ";
}

db->query($TempSQL);

如何将其重写为 db->prepare()?

我是否也应该即时构建语句->execute(array(':param' => $var)))?

有没有更好/更简洁的方法?

最佳答案

也许是这样的。 (未经测试)

$TempSQL = "SELECT field1, field2, field3 FROM table WHERE ";
$args=array();

if ($numberParams == 1) {
    $TempSQL = $TempSQL . " field1 = :val1"
    $args[':val1']=$val1;
} else {
    $TempSQL = $TempSQL . " field2 = :val2 and field3 = :val3";
    $args[':val2']=$val2;
    $args[':val3']=$val3;
}

$stmt=$db->prepare($TempSQL);
$stmt->execute($args);

关于php - 如何在 PHP 中为动态查询构建参数化 PDO 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/583592/

相关文章:

php - 前端性能问题

java - 为什么我的 JFrame 之一无法打开/显示在外部 jar 文件上?

php - 通过 PDO 执行的查询返回的记录少于从 PostgreSQL 返回的记录

MySQL BETWEEN 在无符号 bigint 上

java - 从MySQL 4.7升级到5.5,日期字段有问题

PHP MySQL - 如果值不存在于两个表中则插入

php - 将 MySQL 查询结果分组在一起时出错

php - mysql中的随机查询但显示新记录

javascript - 黑色模态淡入淡出阻止我在文本字段中输入

php - 如何使用 phpmyadmin 将具有相同架构的两个表合并为一个表