PDOException。 SQL语法错误

时间:2014-03-02 16:00:26

标签: php mysql sql

我的MySQL查询存在问题,但我看不出它告诉我的内容有什么问题。我正在我的本地机器上开发,下面是数据库连接语句:

$db = new PDO('mysql:host=localhost;dbname=xsa_primary;charset=utf8', 'root', '',       array(PDO::ATTR_EMULATE_PREPARES => false, 
                                                                                         PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

这是我的实际查询页面(对于先行搜索功能,typeahead.php):

$query = $_GET['query'].'%';

$stmt = $db->prepare("SELECT accountEmail FROM `xsa_accounts` WHERE accountEmail LIKE = :query");
$stmt->bindParam(':query', $query, PDO::PARAM_STR);
$stmt->execute();

$results = array();
foreach ($stmt->fetchAll(PDO::FETCH_COLUMN) as $row) {
    $results[] = $row;
}

return json_encode($results);

我在该页面上一直收到以下错误,我尝试了很多MySQL查询的变体,包括一次性的一切事物和特定事物上的反引号(`)等等。仍然没有运气。

错误是:

致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在“=?”附近使用正确的语法在.......... / typeahead.php的第1行:8堆栈跟踪:#0 .......... \ typeahead.php(8):PDO->准备( 'SELECT accountE ...')#8 {main}在第8行的.......... \ typeahead.php中抛出

我的MySQL表包含以下列(仅用于测试):

1   accountID PRIMARY AUTO_INCREMENT
2   accountFirst
3   accountLast
4   accountEmail
5   accountPhone

我在这里缺少什么?这让我疯了。我现在已经盯着这个约45分钟。

2 个答案:

答案 0 :(得分:1)

替换

$stmt = $db->prepare("SELECT accountEmail FROM `xsa_accounts` WHERE accountEmail LIKE = :query");

$stmt = $db->prepare("SELECT accountEmail FROM `xsa_accounts` WHERE accountEmail LIKE :query");

您必须在=

之后删除LIKE

答案 1 :(得分:0)

您不使用和LIKE

等号
LIKE = :query  (bad)
LIKE :query (good)

明确地:将您的SQL语句更改为此

 "SELECT accountEmail FROM `xsa_accounts` WHERE accountEmail LIKE :query"