为什么这个PHP PDO函数不返回数据库中的值


Why does this PHP PDO function not return the value from the database?

我有一个web应用程序,它接受Excel电子表格,解析数据,并将数据添加到MySQL数据库中。有些床单很好,一切都如预期。但是,有些工作表在应该返回true时没有返回。在输入数据之前,我有一个通用函数,它会检查该表的值,然后返回truefalse。此功能如下所示:

//Check if a sql will return with any values
function tableCheck($table, $column, $value){
  //PDO Connecttion
  $core = Core::getInstance();
  $sql = "SELECT * FROM $table WHERE $column = :value;";
  //Create a prepared statement
  $stmt = $core->dbh->prepare($sql);
  $stmt->bindParam(':value', $value, PDO::PARAM_STR);
  $stmt->execute();
  //return true if there is a hit on that value
  if($stmt->rowCount() > 0){
    return true;
  } else {
    return false;
  }
}

就像我说的,这有时有效,有时无效,我从那张表中得到了大量重复的值。显然,这严重扰乱了我的数据。

一开始我认为这与特殊字符有关,但后来我发现这个字段没有特殊字符的表也有类似的问题。这个问题也只出现在单个列上。工作表的其他字段在任何情况下都可以解析得很好。

你知道是什么导致了这个问题吗?

EDIT:我还想注意,如果我将数据复制/粘贴到MySQL工作台或命令行中,它确实会返回行。

这看起来很危险,但我确信你正在进行某种过滤,对吧?:)

在我看来,您的某些表或列名可能是保留字,例如ASBY

在查询中围绕它们打勾:

$sql = "SELECT * FROM `$table` WHERE `$column` = :value;";

问题是输入的数据大于字段所能接受的数据。该列是VARCHAR,并且传入的数据超过255个字符。我切换到TEXT数据类型,问题就解决了。