insert into test (sometext) values ("?"),("?")
$a= array("weird' text","sdfa");
我想使用bind参数在word sometext中将文本插入到表test中,并且我不想在循环中执行execute语句。我不能在("?& #34;),("?")形式,因为查询可能会崩溃,因为文本可以由引号组成。
那么有没有办法在一(1)个执行语句中使用PDO来实现这个目的?
答案 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->执行();