我正在处理DAO中的一个方法,该方法会查找条目的ID。在这种情况下,作者。用户输入的数据通常包含两个名称作为作者条目(旧数据已迁移过未更新),如下所示:
Berenstain,Stan&扬
在查找类似的内容时,代码可以完美运行:
艾格 - 克拉克,朱莉
但每次作者姓名中都有&
时,它就会失败。在搜索中将作者复制并粘贴到PhpMyAdmin中可以找到作者。
我已经确认$authorName
实际上是正确的名称:
Berenstain,Stan&扬
我已经验证这在准备好的语句和普通查询中都失败了。我也确认它失败了,有一个以上的作者条目,常见的失败点似乎是包含&
符号的作者。所有其他尝试过的查找都成功了。
我正在使用PDO连接。它在此方法的行计数返回点失败(我已经验证rowCount
与MySQL一起工作)。
这是代码:
public function getAuthorIDByName($authorName) {
$dbConn = Connectors::pdoDatabaseConnect();
$sql = "SELECT authorID FROM authors WHERE authorName=?";
if (!$stmt = $dbConn->prepare($sql)) {
return false;
}
if ($stmt->execute(array($authorName)) === false) {
return false;
}
if($stmt->rowCount() != 1) {
return false;
}
$obj = $stmt->fetch(PDO::FETCH_OBJ);
return $obj->authorID;
}
我尝试了以下操作,但失败了:
$sql = "SELECT authorID FROM authors WHERE authorName = :authorName";
if (!$stmt = $dbConn->prepare($sql)) {
Log::logEndMethod();
return false;
}
$stmt->bindParam(':authorName', $authorName, PDO::PARAM_STR);
if ($stmt->execute() === false) {
return false;
}
答案 0 :(得分:1)
由于您的表格为latin1_swedish_ci
,因此不太可能是字符编码问题,而不是html编码问题。尝试执行var_dump($authorName)
来查看您在查询中添加的内容。如果您使用浏览器查看输出,请确保查看页面源而不是生成的HTML。或者在将任何输出发送到浏览器之前发出header("Content-type: text/plain")
。您可能会在查询中添加&
而不是&
。