如何使用 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);
我正在使用 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);