我在这里找不到什么问题,特别是在1
行。
我收到了错误:
SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MariaDB服务器版本对应的手册,以便在第1行的':username'附近使用正确的语法
include ("params.php");
include ("$config");
$_POST = array_map( 'stripslashes', $_POST );
extract($_POST);
try {
$stmt = $db->query('SELECT username FROM members WHERE username = :username');
if ($stmt->rowCount() == 0) {
$msg = 'YOU ARE NOT REGISTERED !';
}
elseif ($stmt->rowCount() == 1) {
$msg = 'WELCOME ' . $username . ' !';
}
else {
$msg = 'SOMETHING WRONG - MORE THAN ONE USER';
}
echo $msg;
}
catch(PDOException $e) {
echo $e->getMessage();
}
try {
$stmt = $db->prepare('UPDATE members SET logged = :logged WHERE username = :username') ;
$stmt->execute(array(
':logged' => 1,
':username' => $username,
));
}
catch(PDOException $e) {
echo $e->getMessage();
}
答案 0 :(得分:3)
你有
$stmt = $db->query('SELECT username FROM members WHERE username = :username');
但你必须先prepare
一个陈述,就像你在
$stmt = $db->prepare('UPDATE members SET logged = :logged WHERE username = :username') ;
$stmt->execute(array(
':logged' => 1,
':username' => $username,
));
答案 1 :(得分:1)
您需要准备该声明。您在自己的代码中有一个示例,您可以在其中准备一个查询,为占位符:logged
和:username
提供值。但是,使用:username占位符无法实现此目的,这就是您收到该错误的原因。
http://php.net/manual/en/mysqli.prepare.php给出了另一个向下流程的例子。