2012-07-24 61 views
0

所以我正在研究一些代碼,它將一段文本和一個id插入到表中。我發送代碼的文本和用戶的名字。我想獲取用戶名,並從users表中選擇與其對應的ID。然後我將它插入到文本表格中。從數組插入值

我已經試過這樣:

$id = mysql_query("SELECT users.id FROM users WHERE name='$username'"); 

mysql_query("INSERT INTO `shouts` (`id`, `user`, `text`, `datetime`) VALUES (NULL, '$id', '$text', '$datetime');"); 

但它不工作,因爲變量$id保存SQL數據。我如何將數據轉換爲整數?

+2

好吧......你試過了...... _then_發生了什麼? – Neal 2012-07-24 19:24:54

+0

你是什麼意思,它存儲SQL數據?你可以添加一個什麼樣的內容? – andrewsi 2012-07-24 19:27:56

回答

0

嘗試$id = addslashes($id);或編碼的SQL字符串

+0

哦,對不起。我的印象是你正試圖將一個sql字符串保存到表中。夥計們是正確的,首先從用戶表中獲取結果,然後將其保存爲json編碼或序列化 – 2012-07-24 19:29:46

+0

如果只有一個字段需要來自用戶表,例如id,那麼您不需要序列化。 – 2012-07-24 19:30:48

0

的$ id

的任何其他方法是要包含你的結果,你需要獲取ID並將它放入一個變量。檢查出mysql_fetch_row函數,我認爲這會得到你想要的。 mysql_fetch_row syntax

+0

謝謝!得到它的工作。 – 2012-07-24 19:32:26

0

mysql_query永遠不會返回一個正常變量,只會返回一個結果資源。嘗試使用mysql_fetch_assoc從選擇查詢中獲取數據。另外,MySQL php的擴展名已被棄用,我們鼓勵您遷移到MySQLi或PDO。

3

manual

返回的結果資源應該傳遞給mysql_fetch_array(),用於處理結果表 等 功能,訪問返回的數據。

從手動

另外:

這個擴展的使用氣餒。應該使用MySQLi或PDO_MySQL 擴展 。

要回答你的問題,試試這個:

$id = mysql_query("SELECT users.id FROM users WHERE name='$username'"); 
$id = mysql_fetch_assoc($id); 
mysql_query("INSERT INTO `shouts` (`id`, `user`, `text`, `datetime`) VALUES (NULL, '". $id['id']."', '$text', '$datetime');"); 

雖然這是一個壞主意™,你真的應該考慮使用PDO。這真的不那麼難。它將爲您提供準備SQL語句的能力,讓您在夜晚更容易入睡,並知道您不會成爲SQL注入的受害者。你所擁有的代碼至多是不明確的,無論你自己是否已成爲受害者。

+0

另請參見[防止SQL注入指南](http://bobby-tables.com/php.html)。雖然這很好,但你已經做了一個筆記,你真的不應該在這裏發佈代碼,這是非常魯莽的。 – tadman 2012-07-24 19:41:28

0

這應該工作

$sql = mysql_query("SELECT users.id FROM users WHERE name='$username'"); 
    $id = mysql_fetch_array($sql)['id'];