2010-01-19 28 views
1

嘿,我寫了一些代碼從數據庫中提取一些信息並檢查它是否符合$ _COOKIE數據。但我收到錯誤消息:php中的SQL錯誤

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 

到目前爲止我的代碼是:

$con = mysql_connect("XXXX","XXXXX","XXXXXXX"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 
mysql_select_db("XXXXXX", $con); 
$id = $_COOKIE['id']; 
$ends = $_COOKIE['ends']; 
$userid = strtolower($_SESSION['username']); 
$queryString = $_GET['information_from_http_address']; 
$query = "SELECT * FROM XXXXX"; 
$result = mysql_query($query) or die(mysql_error()); 
    while($row = mysql_fetch_array($result)){ 
    if ($queryString == $row["orderid"]){ 
     $sql="UPDATE members SET orderid = ''WHERE (id = $id)"; 
     $sql="UPDATE members SET level = 'X'WHERE (id = $id)"; 
     $sql="UPDATE members SET payment = 'XXXX'WHERE (id = $id)"; 
     $sql="UPDATE members SET ends = '$ends'WHERE (id = $id)"; 
     if (!mysql_query($sql)) 
     { 
      die('Error: ' . mysql_error()); 
     } 
    } 
    } 

任何幫助,將不勝感激,謝謝 。

+0

它正在從網址中提取的信息是這種格式: XXXXX-XXXXX-XXXXX – Crazyd22 2010-01-19 16:25:02

回答

2
$sql="UPDATE members SET ends = '$ends'WHERE (id = $id)"; 

應該

$sql="UPDATE members SET ends = '$ends'WHERE (id = '$id')"; 

(IE添加'周圍的$ id)

+0

現在這個作品啊,很好,謝謝! :D – Crazyd22 2010-01-19 16:33:18

+0

如果這些變量來自用戶可以觸摸的任何地方,請注意關於SQL注入攻擊的其他答案... – 2010-01-19 16:34:28

+0

對於所有非整數ID,這將是正確的 – LukeP 2010-01-19 16:35:33

1

我不確定這是否是錯誤,但是您是否意識到您的代碼只運行最後的UPDATE?你分配$sql 4時,只有第四assignement運行後它...

+0

所以,真的,好點! – Thomas 2010-01-19 16:43:20

0

首先你保持覆蓋$ SQL變量所以只有

$sql="UPDATE members SET ends = '$ends'WHERE (id = $id)"; 

正在執行。

而我要說的是,$ id變量是不是你認爲它是(也許空的,因爲像上面的一個不進行身份查詢:

$sql="UPDATE members SET ends = '$ends'WHERE (id =)"; 

會拋出這樣的錯誤回到

嘗試

$id = NULL; 

$id = $_COOKIE['id']; 

如果錯誤消失,這意味着$ id不是您認爲的那麼

+0

啊woops,我已經刪除,並出現相同的錯誤信息 – Crazyd22 2010-01-19 16:30:32

1

如果$ _COOKIE ['id']沒有值,那麼您的SQL語句中的$ id將爲空, SQL看起來像這樣:

UPDATE members SET ends = 'something' WHERE (id =)

其中,當然,是無效的SQL。

1

只有SQL語句將執行的一個,這是最後一個。您需要WHERE子句之前添加一些空格,這樣的:

$sql="UPDATE members SET ends = '$ends' WHERE (id = $id)"; 

另外要警惕你的cookie被最終用戶改變事件SQL注入攻擊。另一個值得注意的地方是你的orderid專欄。它是VARCHAR還是其他唯一標識符?如果它是一個整數,那麼將其設置爲空字符串將不起作用。你可能想在這裏重新思考你的模式。

編輯:你需要做的另一件事是檢查,以確保餅乾實際上有價值。如果不是,你的SQL字符串將會被搞亂。你有沒有關於使用parameterized queries through PDO,所以你不必擔心SQL注入?

+0

+1 Yep:注意sql注入if使用可以觸摸任何東西... – 2010-01-19 16:35:49