Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php INSERT中的bindValue无效_Php_Mysql - Fatal编程技术网

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();