使用pdo在数据库中插入多行

时间:2016-04-12 10:43:59

标签: php mysql pdo

insert into test (sometext) values ("?"),("?")
$a= array("weird' text","sdfa");

我想使用bind参数在word sometext中将文本插入到表test中,并且我不想在循环中执行execute语句。我不能在("?& #34;),("?")形式,因为查询可能会崩溃,因为文本可以由引号组成。

那么有没有办法在一(1)个执行语句中使用PDO来实现这个目的?

2 个答案:

答案 0 :(得分:1)

  

我无法在("?"),("?")表单中内爆数组,因为查询可能会崩溃,因为文本可以由引号组成。

准备好的陈述用于解决引用/逃避问题。

此语法错误 1

implode()

您不必按引号括起参数,您必须以这种形式编写查询:

$a     = array( "weird' text", "sdfa" );
$query = "INSERT INTO test (sometext) VALUES (" . implode( "),(", array_fill( 0, count( $a ), "?" ) ) . ")";
$stmt  = $db->prepare( $query );
$stmt->execute( $a );

然后,您可以使用substr而无需担心引号:

str_repeat

作为替代方案,您可以使用implode$query = "INSERT INTO test (sometext) VALUES " . substr( str_repeat( "(?),", count( $a ) ), 0, -1 ); 代替insert into test (sometext) values ("?"),("?")

find_in_set

1 使用group_concat在字段中插入两个问号。

答案 1 :(得分:0)

$ stmt = $ conn-> prepare(" INSERT INTO test(field1,field2,field3)VALUES(?,?,?)");

$ stmt-> bind_param(" sss",$ field1,$ field2,$ field3);

//设置参数并执行

$ field1 =" test&#34 ;;

$ field2 =" test2&#34 ;;

$ field3 =" test@test.cc" ;; $ stmt->执行();