2017-01-05 6 views
-1

ここで何が間違っているかはわかりません。特に1という行にあります。あなたがその文を準備する必要があり構文エラー - 何が間違っているかを見つけることができません

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':username' at line 1

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

における第二文の中でそうであるように、なぜあなたは 'にstripslashesを()'を使用している必要がありますか?準備されたステートメントを使用していて、どのAPIを使用して接続していますか? –

答えて

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, 
)); 
+0

ありがとうございました。解決済み。 – bonaca

1

私はエラーを得ました。下の例は、プレースホルダ :logged:usernameの値を提供するクエリを準備する独自のコードです。しかし、あなたの上には:usernameプレースホルダを使用していないので、そのエラーが発生しています。

http://php.net/manual/en/mysqli.prepare.phpは、底部に向かうプロセスの別の例を示す。

関連する問題