Php PDO Select语句返回false,即使行存在

Php PDO Select语句返回false,即使行存在,php,mysql,pdo,Php,Mysql,Pdo,我正在写一个脚本,向我的数据库中添加一个大的产品列表。 它在categories表中搜索产品的类别,如果它存在,则获取该类别的id,依此类推。 但是我的pdo select语句从不返回值,它添加了数百个相同的类别。。 我的pdo声明是: $query = $db->query("SELECT * FROM categories WHERE name = '".$fields[2]."' ")->fetch(); if (

我正在写一个脚本,向我的数据库中添加一个大的产品列表。 它在categories表中搜索产品的类别,如果它存在,则获取该类别的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
     }
仍然添加每个值作为新类别

试试这个

$stmt = $db->prepare('SELECT * FROM categories WHERE name=:f_name');
$stmt->execute(['f_name' => $fields[2]]);
$query = $stmt->fetchColumn();
if ( $query ){
}

这容易受到SQL注入的攻击。了解如何正确、安全地编写查询。它还可以根据您遇到的具体问题,修复您缺乏结果的问题。正在将查询变量用作{$fields[2]},但我正在尝试所有可能的方法。。我从我的excel文件中获取值,所以在这个脚本中没有sql注入的风险。顺便说一句:)@ADysonWell这取决于excel数据的来源,你不认为吗?此外,由于输入中存在未替换字符,还可能存在意外sql语法错误的风险。使用参数化查询只是一种很好的做法……没有理由不这样做。只要有一条规则,你不相信任何输入,不管它来自哪里。这样就不会有意外了。解决这个问题,看看你是否还有问题afterwards@ADyson我更新了代码,代码仍然在运行。从中得出的唯一真正结论是$fields[2]与数据库中的任何内容都不匹配。这可能是由于输入或数据库数据中存在奇怪的隐藏字符,或者编码不匹配,或者连接到错误的数据库副本,或者在执行查询时调试$fields[2]的内容不准确。我们对所有数据和任何配置都视而不见,因此很难确定。你需要一个接一个地排除可能的原因不。。仍然有相同的$fields[2]值来自输入?在查询之前,您是否检查了$fields[2]是否为空?当我键入print$fields[2]时,它是否为空;它会打印正确的值你会在不使用该变量的情况下用真实值检查查询吗?是的,我试过了,它可以工作