语法错误 - 找不到有什么问题

时间:2017-01-05 22:18:28

标签: php mysql

我在这里找不到什么问题,特别是在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();
}

2 个答案:

答案 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给出了另一个向下流程的例子。