2012-01-06 82 views
0

如果我有mysql表foo與字段a,b,c,d與多個記錄和一個主鍵。記錄1具有以下數據:a = 1,b =真,c = val1a,d = val2a。 如果我想使用PHP來訪問數據,我做的:PHP MYSQL寫一個關聯數組(記錄)到mysql

$result = mysql_query("SELECT * FROM foo WHERE a = '1'"); 
$rec = mysql_fetch_array($result); 

要改變B和C,我會做:

mysql_query("INSERT INTO foo (b,c) VALUES (false,'newval') WHERE a = '1'"); 

有沒有寫全記錄沒有列出所有的方式字段(a,b,c,d)?

我想什麼做的是寫全$ REC回表foo:

$rec['b'] = false; 
$rec['c'] = 'newval'; 
mysql_query("INSERT INTO foo $rec"); 

我知道我可以做一個foreach和建全插入,但有已經是一個PHP函數,它我想要完成什麼?

回答

3

簡單的答案 - 沒有。插入值時應該考慮很多事情,它們的類型是什麼,它們是否被轉義或者不需要引號,等等。所以通常所有的值都不能被視爲相同的添加到一個字符串。最好使用像MySQLi這樣的擴展名,而不是通過連接stings來構建查詢。一個簡單的函數可以按照您所猜測的完成您想要的循環,但我不會推薦。

而且 - 你已經錯了的東西:

mysql_query("INSERT INTO foo (b,c) VALUES (false,'newval') WHERE a = '1'"); 

是無效的語法。您需要使用UPDATEchange b and c。你也不需要圍繞id的引號,即WHERE a = '1'應該是WHERE a = 1,它是一個整數值。

+0

是的,錯字,我的意思是更新。我已經做了一段時間的mysql,但來自讀取記錄,更改記錄,寫入記錄方法,並認爲是mysql_fetch_array作爲關聯數組在記錄中讀取,如果select用於所有字段,則可能會有php函數寫入將關聯數組放回那裏。我已經看了mysqli的東西,並使用它的一些。 – user999684 2012-01-06 16:31:10

+0

閱讀與寫作完全不同 - 閱讀所有數據時,將以字符串形式返回,與存儲在數據庫中完全相同。因此它不需要寫入的所有類型驗證,轉義等。 OTOH,在不對不同領域和數據採取適當行動的情況下編寫代碼,您很容易就會發現錯誤,錯誤的數據和/或安全問題。 – Nikoloff 2012-01-06 17:28:50

+0

感謝您的信息。有沒有一篇好文章解釋這些東西?所以,如果我爲一條記錄讀取一個int類型的字段,它會以字符串形式返回它,這樣如果我將它寫回來,它會弄亂數據庫,或者這不是您所指的?你是說如果我有一個名爲intfld且值爲123的int字段,請使用上述方法讀取該字段,並將其賦值給像$ var1 = $ rec ['intfld']這樣的變量,然後執行mysql_query(「UPDATE foo SET intfld =「'。$ var1。'」WHERE a ='1'「);它會導致數據庫損壞?我感謝你的幫助。 – user999684 2012-01-06 19:28:16

0

我的MySQL有點生疏,但我不確定你可以做這樣的插入。您通常會爲新值創建更新語句,並且通常需要您試圖避免的foreach循環。

也許你想使用像doctrine,http://www.doctrine-project.org/這樣的東西來將行抽象成一個對象來處理讀取和更新。