2010-06-02 60 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