Доброго времени суток!
Прошу помочь готовым кодом, поскольку с MySql познакомился совсем недавно.
Вопрос в следующем: как при подготовленном динамическом запросе, передавать разное количество привязываемых переменных в bind_result()? После нескольких часов поиска в сети, пришло понимание, что нужно как-то использовать функцию call_user_func_array(),
но как она должна выглядеть в данном случае не могу сообразить... я так понимаю, должно выглядеть приблизительно так: call_user_func_array('bind_result', array($col1, $col2, $col...)), НО в описании функции написано, что она вызывает пользовательскую функцию с массивом параметров, отсюда два вопроса: 1)если указать bind_result вызовется ли "родная" функция bind_result() или нужно писать свою и туда уже "впихивать" bind_result(); 2)как я понимаю, если просто написать array($col1, $col2, $col...) то передадутся значение $col1, $col2, $col..., а мне необходимо передать имена переменных $col1, $col2, $col...
Вообщем темный лес и ни одной светлой мысли(((
PS Просьба не отсылать читать документацию (я там был) примеры на разных ресурсах видел, пробовал под себя переписать, но увы не хватает знаний, поэтому ОГРОМНАЯ просьба, переписать нижеприведенный код, или привести пример рабочего(полного) кода.
Заранее благодарен!
$id = '1';
$stmt = $db_mysqli->prepare("SELECT `сolumn_name1`,`сolumn_name2`, `сolumn_name...` FROM `db_name_table` WHERE `id`=?"); //Отправляем шаблон
$stmt->bind_param("i",$id); //Устанавливаем параметры
$stmt->execute() or die("Запрос не выполнен!"); //Выполняем запрос
$stmt->bind_result($col1, $col2, $col...); //<-Вот как сюда передавать произвольное количество переменных???
while ($stmt->fetch())
{
echo"<br>$col1 $col2 $col..."; //Выводим результат пользователю.
}
$stmt->close(); //Удаляем шаблон из памяти.
1. _Evgenij_ - 14 Августа, 2017 - 01:03:25 - перейти к сообщению
2. _Evgenij_ - 14 Августа, 2017 - 09:27:02 - перейти к сообщению
Нашел решение при помощи eval(). Но буду очень благодарен, если кто-нибудь на вышеприведенном коде объяснит как использовать в такой ситуации функцию call_user_func_array().
Решение с помощью eval():
//создаем строку, генерируем необходимое количество $col...
$bindResult = '$stmt->bind_result($col1,$col2, $col3, $col....);';
//преобразуем строку в код
eval($bindResult);
Решение с помощью eval():
//создаем строку, генерируем необходимое количество $col...
$bindResult = '$stmt->bind_result($col1,$col2, $col3, $col....);';
//преобразуем строку в код
eval($bindResult);
3. Мелкий - 14 Августа, 2017 - 10:03:01 - перейти к сообщению
Если не ради спортивного интереса - то зачем вам вообще сдался bind_result?
Стандартные методы обхода результата выглядят вот так:
Стандартные методы обхода результата выглядят вот так:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- foreach ($stmt as $row) { // емнип, начиная с php 5.4+
- // массив $row со всеми данными этой строки
- }
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- while ($row = $stmt->fetch_assoc()) {
- // массив $row со всеми данными этой строки
- echo " id = " . $row['id'] . "\n";
- }
Ну а для спортивного интереса см вот этот комментарий: http://www.php.net/manual/de/fun...-array.php#91503