MySQL PDO查询语法错误?参数

视频

作为一个新手,我遵循了PHP MySQL教程,建议使用常规的MySQL php函数。但是,由于有人告诉我PDO是更好的选择,因此我一直在将代码转换为PDO。我只是遇到了以下问题:

    $query = $uspdb->prepare("SELECT post_id, is_approved, reports FROM ? WHERE id=? AND ?");
    $query->bindValue(1, $table, PDO::PARAM_INT);
    $query->bindValue(2, $id, PDO::PARAM_INT);
    $query->bindValue(3, checkPermission("comment_moderation"),PDO::PARAM_BOOL);
    $query->execute;
    $result = $query->fetch(PDO::FETCH_ASSOC);

第一行引发以下PDO异常:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? WHERE id=? AND ?' at line 1

这是为什么?我不知道语法有什么问题。我正在阅读教程告诉我,我应该使用bindValue或execute(array(stuff))添加参数,而不是“。$ id”。之类的东西,因为它比较安全,但这出于任何原因都行不通。

你的常识

不幸的是,准备好的语句只能表示数据文字。(在模拟准备的情况下)。因此,开发人员必须自己照顾标识符-PDO对此无济于事

为了使动态标识符安全,必须遵循2条严格的规则:

  1. 正确格式化标识符。方法
    • 将标识符括在反引号中。
    • 通过将反引号加倍来逃脱它们。
  2. 对照硬编码的白名单进行验证

格式化之后,可以安全地将$ table变量插入查询中。因此,代码将是:

$field = "`".str_replace("`","``",$field)."`";
$sql   = "SELECT * FROM t ORDER BY $field";

但是,尽管这种格式足以满足ORDER BY之类的要求,但在大多数其他情况下,仍有可能进行另一种注入:让用户选择他们可以看到的表或字段,我们可能会揭示一些敏感信息,例如密码或其他个人数据。因此,始终最好根据允许值列表检查动态标识符。这是一个简单的示例:

$allowed = array("name","price","qty");
$key = array_search($_GET['field'], $allowed));
if ($key === false) {
    throw new Exception('Wrong field name');
}
$field = $allowed[$key];
$query   = "SELECT $field FROM t"; //value is safe

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL查询语法错误

来自分类Dev

PHP PDO MySQL语法错误

来自分类Dev

MySQL错误.SQL查询语法错误

来自分类Dev

MySQL错误.SQL查询语法错误

来自分类Dev

子查询中的MySQL语法错误

来自分类Dev

MySql中的查询语法错误

来自分类Dev

连接查询中的mysql语法错误

来自分类Dev

如何修复MySQL查询语法错误

来自分类Dev

wpdb查询/准备的MySQL语法错误

来自分类Dev

MySQL查询-奇怪的语法错误

来自分类Dev

MySQL Join查询中的语法错误

来自分类Dev

mysql查询中的语法错误

来自分类Dev

AWS mysql 多查询语法错误

来自分类Dev

springboot java mysql语法错误在参数

来自分类Dev

MySql存储过程参数-语法错误

来自分类Dev

mysql更新查询中的语法错误我的语法是正确的

来自分类Dev

无效的PDO MySQL陈述式-语法错误

来自分类Dev

Android PHP PDO MySQL UPDATE语法错误

来自分类Dev

MySQL PDO语法错误或访问冲突:1064

来自分类Dev

Dctrine DQL查询到Mysql查询语法错误

来自分类Dev

MySQL IF ... THEN语法错误

来自分类Dev

mysql语法错误;

来自分类Dev

mySQL查询显示语法错误,但没有任何错误

来自分类Dev

MYSQL-删除查询中有in子句的语法错误

来自分类Dev

无法在MySQL语法错误中运行查询

来自分类Dev

PHP和MySQL中的INSERT查询语法错误

来自分类Dev

MYSQL PHP:更新查询会导致语法错误

来自分类Dev

MySQL 5中的查询语法错误过程?

来自分类Dev

Python MYSQL查询引发编程语法错误1064