gpt4 book ai didi

php - 在准备好的语句 PDO PHP 中绑定(bind)值数组

转载 作者:行者123 更新时间:2023-11-29 01:13:11 25 4
gpt4 key购买 nike

我正在尝试将我的值绑定(bind)到 PDO 中的准备好的语句中。

这是使用准备好的语句 block 的先决条件代码:

$tab = 'air_user';
$fie = array('USER_NAME', 'USER_PASSWORD' , 'USER_EMAIL');
$name = $_POST['name'];
$pass = $_POST['password'];
$email = $_POST['email'];
$val = array(
'name' => $name,
'pass' => $pass,
'email' => $email
);
$this->connect($tab,$fie,$val);

这是我准备这些值并进行必要插入的部分:

public function connect($table,$fields,$values)
{

try{
$con = new PDO ('mysql:host=localhost;dbname=air','root','123456');
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$fields = implode(", ", $fields);
echo $fields;
$values = implode(", ", $values);
echo $values;

// have to make this prevent sql injection //
$stmt = $con->prepare("INSERT INTO $table(ID,$fields) VALUES (?,?,?,?)");
$stmt->execute(array('',$values));

} catch(PDOException $e) {
die("this cant connect the database");
}
}

那么为什么我的 INSERT 不工作?有谁能帮我看看吗,我试了很多东西,都没用。

最佳答案

不,不要内爆您要在->execute() 中传递的值,它必须是一个数组:

$fields = implode(", ", $fields);
// $values = implode(", ", $values); // DONT IMPLODE!
$values = array_values($values);

$stmt = $con->prepare("INSERT INTO $table(ID,$fields) VALUES (NULL, ?,?,?)");
$stmt->execute($values);

或者@Augwa的建议:

// $fields = implode(", ", $fields); // not needed
// $values = implode(", ", $values); // DONT IMPLODE!

$placeholders = substr(str_repeat('?,', sizeOf($fields)), 0, -1);
// $placeholders = implode(', ', array_fill(0, count($values), '?'));

$stmt = $con->prepare(
sprintf(
"INSERT INTO %s (%s) VALUES (%s)",
$table,
implode(',', $fields),
$placeholders
)
);
$stmt->execute($values);

关于php - 在准备好的语句 PDO PHP 中绑定(bind)值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30021780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com