2010-05-11 142 views
0

我有一个相当大的INSERT语句像MySQL的转义字符串帮助

INSERT INTO multimedia (filename, regex, flag) VALUES (('adsfavr.jpg', '<div id="title">', 0), (...), (...)); 

如何准备查询MySQL.It的太长,做手工。它包含双引号,所以我不能使用php函数mysql_real_escape_string()

+0

你的问题是什么? – ant 2010-05-11 11:21:14

+0

如果你可以使用mysql_real_escape_string,你的问题是什么?在查询中使用它们之前,应该对每个变量使用mysql_real_escape_string。 – 2010-05-11 11:22:03

+0

查询是在一个逗号分隔的文件中,我不能使用mysql_real_escape_string因为正则表达式中的引号 – HyderA 2010-05-11 11:28:21

回答

2

为什么要插入所有记录与单​​个语句?您可以使用预准备语句: INSERT INTO multimedia(filename,regex,flag)VALUES(?,?,?);

和for循环逐一插入记录。

我不是一个PHP程序员,但代码看起来是这样的(从http://php.net/manual/en/pdo.prepared-statements.php采取部分):

$stmt = $dbh->prepare("INSERT INTO multimedia (filename, regex, flag) VALUES (:filename, :regex, :flag)"); 
$stmt->bindParam(':filename', $filename); 
$stmt->bindParam(':regex', $regex); 
$stmt->bindParam(':flag', $flag); 

for ($i = 1; $i <= ...; $i++) { 
    $filename = ... 
    $regex = ... 
    $flag = ... 

    $stmt->execute(); 
} 

使用事先准备好的声明中,仅DBMS编译SQL一次,因为它会与你的SQL语句。要确保插入全部记录或不记录(如果您仍然需要这样的断言),请使用事务。

此外,这也可以解决您的转义问题,因为您不需要将值放入字符串中。准备语句的字符串只定义SQL“模板”。

-2

你可以试试这个方法在单个查询来执行多个插入...

 
$sql = "INSERT INTO users (name, age) 
    VALUES 
    ('Helen', 24), 
    ('Katrina', 21), 
    ('Samia', 22)"; 

mysql_query($sql); 
+0

Hi PHP-Prabhu。我低估了这一点的原因是:1)这实际上是gAMBOOKa想要做的,但是被问及如何; 2)恕我直言,使用多个(...)表达式来动态插入多个记录是个不错的主意。 – chiccodoro 2010-05-11 14:27:59

0

如果储存在一个逗号分隔的文件数据,您可以使用LOAD DATA INFILE查询

这方面的一个样本数据可以帮助。