我的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分钟。
答案 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"