-2

スクリプトに問題があります:

<?php
include('includes/header.php');
include("includes/config.php");
$email = $_GET['email'];
$key = $_GET['key'];
$email = strip_tags($email); 
$email = trim($email);
$key = strip_tags($key); 
$key = trim($key);
$sql = mysql_query("SELECT * FROM confirm WHERE email = '$email' AND key = '$key' 
ORDER BY id ASC LIMIT 1")or die(mysql_error()); 
while($result = mysql_fetch_array($sql))
{ 
$key2 = $result['key']; 
$email2 = $result['email'];  
}
if($key == $key2 && $email == $email2){
$sql = mysql_query("UPDATE users SET user_confirm = 1 WHERE user_mail = '$email2'")or  
die(mysql_error());
$sql = mysql_query("DELETE FROM confirm WHERE email = '$email2'")or die(mysql_error());
echo "Your account have been activated, and is ready to use!";
}else{
echo 'You have entered wrong key or the key is invalid!';
}
include('includes/footer.php');
?>

'key =(ここではkeyvalue)'の近くで構文エラーが発生します

私がここで間違ったことを誰かが知っていますか?

4

3 に答える 3

1

列名が「キー」の場合、問題KEYはMySQL5.1の古い演算子です。列名をバッククォートして機能させることができます

`key` = 'some value'
于 2013-03-14T14:06:13.550 に答える
1

「key」はMySQLで予約語です。

最初のクエリを次のように変更します(キーワードの前後の正しい引用符に注意してください)

$sql = mysql_query("SELECT * FROM confirm WHERE email = '$email' AND `key` = '$key' ORDER BY id ASC LIMIT 1")or die(mysql_error()); 

ただし、より良い解決策は、mysqlの予約語を使用しないことです。したがって、「確認」テーブルの「キー」列の名前を変更できます。

MySQLの予約語のリストは次のとおりです:http: //dev.mysql.com/doc/refman/5.5/en/reserved-words.html

于 2013-03-14T14:08:10.020 に答える
0

列名をcnf_keyとして編集してから、以下のsyntexを置き換えてみてください

$sql = mysql_query("SELECT * FROM confirm WHERE email = '$email' AND `cnf_key`= '$key' 
ORDER BY id ASC LIMIT 0,1")or die(mysql_error()); 
于 2013-03-14T14:07:55.387 に答える