2017-03-02 102 views
0

我的測試代碼:插入到錯誤的SQL語法

<?php 
$connessione = mysql_connect("***", "***", "***"); 
mysql_select_db("***", $connessione); 

$risultato = mysql_query("SELECT * FROM servem_vote", $connessione); 

if(mysql_query("INSERT INTO servem_vote (uid,lastvote) VALUES ($uid,now()) ON DUPLICATE KEY UPDATE lastvote=now(); 

")) { 
    header('location:/home.php'); } 
else { 
    echo "Error: " . mysql_error(); } 
mysql_close($con); 
?> 

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 'now()) ON DUPLICATE KEY UPDATE lastvote=now()' at line 1

DB:

http://prntscr.com/ef7544

我在哪裏做錯了嗎?

+2

您需要停止使用'mysql_ *'功能。它們已被棄用多年,甚至不存在於當前的PHP版本中。請研究一下[PHP數據對象](http://php.net/manual/en/book.pdo.php),簡稱PDO,用於更現代的方法。 – sidyll

+0

@sidyll我在哪裏可以找到一個例子? – Focusjob

+0

我的評論有一本手冊鏈接,附有所有說明和示例。如果你不喜歡閱讀手冊,互聯網上還有很多其他的文字。只搜索PHP PDO :) – sidyll

回答

0

您在共享的代碼中缺少$uid。您不要在任何地方設置該值,但是您嘗試將其用作INSERT查詢的一部分。

如果它是從表單數據的到來,從$_REQUEST超全局變量抓住它嘗試使用它之前:

$uid = $_REQUEST['uid']

,如果它不是在MySQL表中的一個整數,你需要用它在單引號作爲你的陳述的一部分。

INSERT INTO servem_vote (uid,lastvote) VALUES ('$uid',now()) 
ON DUPLICATE KEY UPDATE lastvote=now(); 

我不知道這條線提供什麼樣的目的:

$risultato = mysql_query("SELECT * FROM servem_vote", $connessione);

你似乎沒有做的結果,從這個查詢中設置任何東西。

最重要的是:許多人已經評論說你需要清理你的數據,你應該依靠PDO或mysqli *函數來安全地與你的數據庫進行交互。 See answers here

+0

我嘗試過單引號'$ uid' - 錯誤:錯誤的整數值:''在列1''uid'' – Focusjob

+0

因此,在SQL查詢中使用'$ uid'變量時爲空。你期望從哪裏獲得這個變量的值? –

+0

我解決了它,加入:if($ mybb-> user ['uid']> 0) { $ uid = $ mybb-> user ['uid']; \t $ usg = \t $ mybb-> user ['usergroup']; $ user = get_user($ uid); $ name = $ user ['username']; } 如果現在我還想添加另一個查詢UPDATE我該怎麼辦?(SELECT * FROM servem_vote WHERE uid ='$ uid'AND DATE_FORMAT(lastvote,'%m%d%Y')= DATE_FORMAT(NOW) (), '%M%d%Y')) – Focusjob