我正在使用prepare插入具有VARCHAR、TIMESTAMP和DECIMAL类型的数据。
数据已采用mySQL
所需的格式。
我的问题是这个。假设我只有两个项目要插入。我想这样做:
$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", ....);
例如,我不知道如何在循环中构建它。
我该怎么做?
您可以使用PHP 5.6中引入的...
语法将数组作为变量参数传递给mysqli_stmt::bind_param()
函数。
$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);