2012-10-01 54 views
0

我用INSERT INTO數百次,但它已經有一段時間,我一直在推動自己瘋狂就這一個:PHP/MySQL的:INSERT INTO可變列名不工作

//Database Connection 

$movieID = 41154; 
$userID = 15; 
$vote = 'yes'; 

$postVote = mysql_query("INSERT INTO votes (movieID, userID, yesNo, $vote) VALUES ('$movieID', '$userID', 1, 1)"); 

我能夠成功連接到數據庫並從votes表中獲取數據,但出於某種原因,我在使用INSERT INTO時遇到了問題。

以下列在表vote存在:movieIDuserIDyesNo,和yes

有關我可以做什麼改變的想法嗎?我必須忽略一些非常明顯的東西。

+8

任何錯誤? '$ postVote = mysql_query(...)或死(mysql_error());'。從不假定查詢已成功。另外,如果movieid/userid是int字段,則不要引用值。 –

+0

@MarcB謝謝!我已經完全忘記了'或者死亡(mysql_error()')。它說不能設置重複密鑰,這會立即讓我看到我忘記了自動遞增主鍵。再次感謝! –

+0

什麼是正確的事情做這樣的問題嗎?它幫助了我,但我不確定它爲StackOverflow增加了很多價值。我是否刪除它? –

回答

0

正如Marc B指出的那樣,使用... or die(mysql_error()將我引向我的問題。這顯示錯誤,我無法設置重複鍵...我忘了auto incrementvotes表的主鍵。因此,每次嘗試INSERT INTO votes時,它都會一直試圖創建voteID1

$postVote = mysql_query(...) or die(mysql_error()); 

這解決了我的挑戰。但是,Tim G指出使用PDOmysql_query()更好。有了一點閱讀,蒂姆G可能是正確的關於PDO。基於PHPEveryday's Tutorial,我可以重寫我的插入語句這樣:

// database connection 
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); 

//set variables 
$movieID = 41154; 
$userID = 15; 
$vote = 'yes'; 

//query/insert statement 
$sql = "INSERT INTO votes (movieID,userID,yesNo,$vote) VALUES (:movieID,:userID, :yesNo, :$vote)"; 
$q = $conn->prepare($sql); 
$q->execute(array(':movieID'=>$movieID, 
        ':userID'=>$userID)), 
        ':yesNo'=>1)), 
        ':$vote'=>1)); 

而不是使用or die()的,PDO還具有處理錯誤和異常的方式不同。你可以在PHPHash.org's Tutorial: PDO for MySQL - Error Handling上了解更多。

-1

INSERT INTO votes (movieID,userID,yesNo,$vote)

和替換$votevote