Я нахожусь в ситуации, когда я хочу создать код, который получает $bindParam
переменные в этом формате:
$bindParams = [$type1 => $param1, $type2 => $param2, ... ]
Я хочу построить некоторый код, который динамически добавляет, что параметры подготовленное заявление.
Это код, который я построил до сих пор:
$mysql = new mysqli("localhost", "root", "", "db1");
$stmt = $mysql->prepare($sql);
foreach($bindParams as $type => $data) {
$stmt->bind_param($type, $data);
}
$stmt->execute();
$result = $stmt->get_result();
// and after perhaps twiddling with the result set, but this is not the case .....
Для экземпляра
$sql = "INSERT INTO table1 (name, age) VALUES (?,?);"
и
$bindParams = ["s" => "hello", "i" => 15]
Это не всегда имеет такую структуру, и она может измениться на например $bindParams = ["s" => "hello", "i" => 15, "d" => 22.5]
, и поэтому соответственно изменяются $sql
.
После первого компилятора головка к $stmt->bind_param($type, $data);
светлячку смывает эту ошибку:
Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in D:\PHP\tr.php on line 23
Я знаю поддержку PDO, что, как указано here at the end of the page., но, возможно, как можно было бы ожидать, Im не поклонник PDO так;)
Моим другим вариантом является использование обходных решений eval()
, доступных в php, но это из-за того, что я могу придумать.
Есть ли другой способ сделать это?
@mmm его в разделе «Для вашего примера ...'часть. – TechJS
Покажите свой '$ query' и ваш' $ bindParams'. Если у вас более одного типа, он перезаписывает друг друга, поэтому вы всегда будете иметь 1 любого типа. – aynber
Вы не можете поставить один параметр на два разных вызова для одного и того же вызова. Сначала вы передаете имя, например 'INSERT INTO table1 (имя, возраст) VALUES (" hello ",)' и 'INSERT INTO table1 (имя, возраст) VALUES (, 15)' Вам нужно поставить 2 значения на одинаковые –