PDO MySQL编写的声明没有找到结果&登录名称

时间:2015-07-22 18:34:04

标签: php mysql pdo

我正在处理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;
    }

1 个答案:

答案 0 :(得分:1)

由于您的表格为latin1_swedish_ci,因此不太可能是字符编码问题,而不是html编码问题。尝试执行var_dump($authorName)来查看您在查询中添加的内容。如果您使用浏览器查看输出,请确保查看页面源而不是生成的HTML。或者在将任何输出发送到浏览器之前发出header("Content-type: text/plain")。您可能会在查询中添加&而不是&