【发布时间】:2021-07-06 22:09:41
【问题描述】:
我正在编写一个脚本来将大量产品添加到我的数据库中。 它在类别表中搜索产品的类别,如果存在,则获取该类别的 id,依此类推。 但是我的 pdo select 语句从不返回值,它添加了数百个相同的类别.. 我的 pdo 声明是:
$query = $db->query("SELECT * FROM categories WHERE name = '".$fields[2]."' ")->fetch();
if ( $query ){
//Do something
}
$fields[2] 变量 %90 的时间返回一个存在于表中的值,但每次此查询都返回 false..
更新 将查询更改为;
$stmt = $db->prepare('SELECT * FROM categories WHERE name = ? ');
$stmt->execute([$fields[2]]);
$query = $stmt->fetch();
if ( $query ){
//bla bla
}
仍将每个值添加为新类别
【问题讨论】:
-
这很容易受到 SQL 注入的攻击。了解如何正确、安全地编写查询。根据您遇到的确切问题,它也可能会解决您缺乏结果的问题。 phpdelusions.net/pdo
-
正在使用查询变量作为 {$fields[2]} 但我尝试了所有可能的方式.. 并且我从我的 excel 文件中获取值,因此在此脚本中没有 sql 注入的风险顺便说一句:) @ADyson
-
这取决于 Excel 数据的来源,你不觉得吗?由于输入中的未转义字符,也可能仍然存在意外 sql 语法错误的风险。使用参数化查询只是一个好习惯......永远没有借口不这样做。只要有一条规则,即您不信任任何输入,无论它来自哪里。这样就不会有意外了。修复它,然后看看你是否还有问题
-
@ADyson 我更新了代码,它仍然可以正常工作..
-
唯一真正的结论是 $fields[2] 与数据库中的任何内容都不匹配。这可能是由于输入或数据库数据中存在奇怪的隐藏字符,或者编码不匹配,或者您连接到错误的数据库副本,或者您的调试在查询时对 $fields[2] 的内容不准确被执行。我们对所有数据和任何配置都视而不见,因此很难确定。您需要一一排除可能的原因。