如何使用 PHP 准备无数不同类型的字段

How to use PHP prepare with zillions of fields of different types

我正在使用 prepare 插入具有 VARCHAR、TIMESTAMP 和 DECIMAL 类型的数据。

数据已经是mySQL需要的格式。

我的问题是这样的。假设我只有 2 个项目要插入。我会这样做:

$stmt = $mysqli->prepare("INSERT INTO myTable (name, age) VALUES (?, ?)");
$stmt->bind_param("si", $_POST['name'], $_POST['age']);

我的问题是绑定部分。当我必须一次插入 40 列时,如何进行绑定?

我可以这样处理准备部分:

$sql = "INSERT INTO customers ($columns) VALUES ($values)";
$stmt = $mysqli->prepare($sql);

但是下一行会导致一长串可笑的长行,无法理解,而且很容易出错。

 $stmt->bind_param("ssssiidisisssiidiisssidiisidi", ....); 

例如,我不知道如何在循环中构建它。

我该怎么做?

您可以使用 ... 语法将数组作为可变参数传递给 mysqli_stmt::bind_param() 函数,在 PHP 5.6 中引入。

$params = ['name', 42];

$stmt = $mysqli->prepare("INSERT INTO myTable (name, age) VALUES (?, ?)");
$stmt->bind_param(str_repeat('s', count($params)), ...$params);
$stmt->execute();

您真的不需要为每一列单独设置数据类型。您可以将它们全部视为 's'.


我知道你问的是 mysqli,但我只想指出,使用 PDO 更容易:

$params = ['name', 42];

$stmt = $pdo->prepare("INSERT INTO myTable (name, age) VALUES (?, ?)");
$stmt->execute($params);