Php INSERT中的bindValue无效
我的密码-Php INSERT中的bindValue无效,php,mysql,Php,Mysql,我的密码- $con = new PDO ('mysql:host=localhost;dbname=air','root','123456'); $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $fields = implode(", ", $fields); echo $fields; $values = implode("','", $values); echo $
$con = new PDO ('mysql:host=localhost;dbname=air','root','123456');
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$fields = implode(", ", $fields);
echo $fields;
$values = implode("','", $values);
echo $values;
// have to make this prevent sql injection //
// it wont work if i added bindValue why? //
$stmt = $con->prepare("INSERT INTO $table(ID, $fields) VALUES (?, ?)");
$stmt->bindValue(1,'',PDO::PARAM_STR);
$stmt->bindValue(2,$values,PDO::PARAM_STR);
$stmt->execute();
//if I remove `bindValue` and replace this it will insert //
$stmt = $con->prepare("INSERT INTO $table(ID, $fields) VALUES ('', $values)");
为什么在我添加了
bindValue
之后,我的插入不再有效,但是当我使用普通的sql
时,它会起作用,我的bindValue
和值有什么问题?,,有人能帮我看看吗???我不确定$fields和$value是什么,但我假设它们没有问题。您正试图将字符串的bindValue传递到id字段中。你能试着把它改成PDO::PARAM_INT吗?我不确定$fields和$value是什么,但我认为它们没有问题。您正试图将字符串的bindValue传递到id字段中。你能试着把它改成PDO::PARAM_INT吗?我来晚了,但这是一个简单方便的函数,任何人都可以通过搜索答案来实现绑定和插入任何表和字段。没有将PDO::PARAM_STR
作为其默认ant,我看到您的字段都是string
值。希望这有帮助:)
我在这里迟到了,但这是一个简单方便的函数,可以使用任何搜索答案的人来实现绑定和插入到任何表和字段。没有将
PDO::PARAM_STR
作为其默认ant,我看到您的字段都是string
值。希望这有帮助:)
“不工作”是否会导致您可能想要显示的错误消息?$fields和$value包含什么?为什么不直接通过
->execute([…])
传递它们呢?因为要将$values
作为字符串数组插入,所以还应该动态构建问号占位符,这样就不能批量绑定字段了。你必须把它们单独绑起来。另外,要为id字段绑定null,请使用bindValue(2,null,PDO::PARAM_null)代码>所以最好通过execute传递它们~~我知道我会尝试一下,我尝试过这个,并删除了BindValueDos“not work”导致的错误消息,你可能想透露?$fields和$value包含什么?为什么不直接通过->execute([…])
传递它们呢?因为要将$values
作为字符串数组插入,所以还应该动态构建问号占位符,这样就不能批量绑定字段了。你必须把它们单独绑起来。另外,要为id字段绑定null,请使用bindValue(2,null,PDO::PARAM_null)代码>所以最好是通过execute传递它们~~我知道我会尝试一下,我尝试过这个并删除bindvalue
//get array containing fields and its values to be added $fv_array
$fv_array=array(
"field_one_name"=>$field_one_value,
"field_two_name"=>$field_two_value,
"field_three_name"=>$field_three_value
);
$con=new PDO ('mysql:host=localhost;dbname=air','root','123456');
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$fv="";
//create string like :field_one_name,:field_two_name,:field_three_name,
foreach($fv_array as $field=>$value {$fv.=":".$field.",";}
//rtrim removes trailing comma
$statement=$con->prepare("INSERT INTO ".$table." (".implode(",",array_keys($fv_array)).") VALUES (".rtrim($fv, ",").")");
//bind values
foreach($fv_array as $field=>$value){$statement->bindValue(':'.$field,$value);}
$statement->execute();