我有一个web应用程序,它接受Excel电子表格,解析数据,并将数据添加到MySQL数据库中。有些床单很好,一切都如预期。但是,有些工作表在应该返回true
时没有返回。在输入数据之前,我有一个通用函数,它会检查该表的值,然后返回true
或false
。此功能如下所示:
//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工作台或命令行中,它确实会返回行。
这看起来很危险,但我确信你正在进行某种过滤,对吧?:)
在我看来,您的某些表或列名可能是保留字,例如AS
和BY
。
在查询中围绕它们打勾:
$sql = "SELECT * FROM `$table` WHERE `$column` = :value;";
问题是输入的数据大于字段所能接受的数据。该列是VARCHAR,并且传入的数据超过255个字符。我切换到TEXT数据类型,问题就解决了。