2010-06-02 89 views
-1

我正在創建一個應用程序,根據用戶的輸入動態生成引腳並將它們存儲到mySql數據庫中。如何在mysql中動態創建sql插入查詢

$sql = "INSERT INTO tblpin ('pinId', 'ownerId', 'usedby', 'status') 
    VALUES 
     for($i=0;$i<$npin;$i++) 
     { 
      ('$pin[$i]','$ownerid', 'Free', '1'); 
     } 
    ;"; 

我該怎麼做?

+1

通過不混合**代碼**和**數據** – 2010-06-02 05:46:09

+1

@Col。彈片:太棒了。那麼,你能提供一個例子嗎? – cherouvim 2010-06-02 05:49:04

+0

你可以手動編寫簡單的查詢嗎,沒有PHP?所以 - 做到這一點,然後將SQL字符串分解爲常量和重複部分。之後:用循環替換重複的部分,並用php構建它們。 – zerkms 2010-06-02 05:52:31

回答

-1

喜歡的東西

$sql = sprintf("INSERT INTO `tblpin` (`pinId`, `ownerId`, `usedby`, `status`) VALUES ('%s', '%s', '%s', '%s')", 
    generatePIN($pin), 
    mysql_real_escape_string($ownerId), 
    mysql_real_escape_string($usedBy), 
    mysql_real_escape_string($status)); 

或(編輯以炫耀編譯)

$pins = generatePINS($user); // ? however they're generated 
foreach($pins as $pin) { 
    $sql = sprintf("INSERT INTO `tblpin` (`pinId`, `ownerId`, `usedby`, `status`) VALUES ('%s', '%s', '%s', '%s')", 
     $pin, 
     mysql_real_escape_string($ownerId), 
     mysql_real_escape_string($usedBy), 
     mysql_real_escape_string($status)); 
     $result = mysql_query($sql); 
} 

其中generatePIN是你的功能,使你的腳基於無論你立足其關閉的挫折感。或generatePINS返回他們

+0

所以,有兩件事:(1)他試圖一次做多行插入與一個單一的SQL語句。您的解決方案不會那樣做,我不這麼認爲。 (2)任何回答都應該注意,提供者的給定代碼已經成熟用於SQL注入攻擊。 (您提出的解決方案也有同樣的缺陷。) – 2010-06-02 05:58:26

+0

OP沒有記錄多行 - 問題很模糊。針腳可能是一個錯字,一列,誰知道什麼。 OP沒有提及他/她是否正在清理他的數據;如果OP在這個網站上搜索re:sql,他/她一定會找到很多的例子(地獄,甚至包括我的一些答案) – 2010-06-02 06:15:46

1

數組試試這個:

$sql = "INSERT INTO tblpin ('pinId', 'ownerId', 'usedby', 'status') VALUES "; 
for($i=0; $i<sizeof($pin); $i++) { 
    if ($i>0) 
     $sql .= ", "; 
    $sql .= "('$pin[$i]', '$ownerid', 'Free', '1')"; 
} 

當然,你一定要逃逸案件$針的值它們含有could mess with the SQL query任何字符。

+1

php中的字符串與「。」連接在一起。和「;」在查詢mysql_query()的結尾是一個錯誤的char,因爲它只接受一個查詢。和最新的:'foreach'在這種情況下更方便。 – zerkms 2010-06-02 05:56:02

+0

感謝zerkms。它已經5年了...... – cherouvim 2010-06-02 05:57:35

+0

它不工作'echo $ sql;'顯示'0'。 – nectar 2010-06-02 06:06:44

1
$s = $pdo->prepare("INSERT INTO xy (a,b,c,d) VALUES (?,?,?,?)"); 
foreach ($pins as $i) { 
    $s->execute($i,$ownerID,"free",1); 
} 
+0

我敢打賭,由於某些性能原因,OP使用了批量插入,但這也會起作用。 – zerkms 2010-06-02 05:59:01