为什么bindParam / bindValue不能与我的SQLite3预处理语句一起使用?
我尝试了$stmt->bindValue
和$stmt->bindParam
。
这不起作用:
$user = "exampleUser"
$db = new SQLite3('example.db');
$stmt = $db->prepare("SELECT COUNT(*) FROM users WHERE username='?'");
if (!$stmt) {
echo $db->lastErrorMsg();;
return false;
}
$stmt->bindParam(1, $user);
$result = $stmt->execute();
echo '<br>';
var_dump($result->fetchArray());
这两个都没有:
$user = "exampleUser"
$db = new SQLite3('example.db');
$stmt = $db->prepare("SELECT COUNT(*) FROM users WHERE username=':user'");
if (!$stmt) {
echo $db->lastErrorMsg();;
return false;
}
$stmt->bindParam(":user", $user);
$result = $stmt->execute();
echo '<br>';
var_dump($result->fetchArray());
但这确实有效:
$db = new SQLite3('example.db');
$stmt = $db->prepare("SELECT COUNT(*) FROM users WHERE username='exampleUser'");
if (!$stmt) {
echo $db->lastErrorMsg();;
return false;
}
$result = $stmt->execute();
echo '<br>';
var_dump($result->fetchArray());
答案 0 :(得分:1)
变量不是字符串文字。
'?'
应为?
且':user'
应为:user
,不得使用单引号。