sqlbindparameter — привязывает несколько параметров в запрос MySQL

Сейчас мне нужно использовать следующую структуру, чтобы справиться с привязкой нескольких параметров в запросе MySQL:

if ($words_total == 1)
{
$statement -> bind_param("s", $words[0]);
}
else if ($words_total == 2)
{
$statement -> bind_param("ss", $words[0], $words[1]);
}
else if ($words_total == 3)
{
$statement -> bind_param("sss", $words[0], $words[1], $words[2]);
}

//and so on....

Я определяю количество вопросительных знаков, используя приведенный ниже код, и вставляю его в свой запрос:

$marks = "";
for($i = 1; $i<=$words_total; $i++) {
if ($i == $words_total)
{
$marks .= "?";
}
else
{
$marks .= "?,";
}
}

Мой вопрос, конечно, должен быть способ обработки столько входов в запрос, сколько мне нужно динамически. Жесткое кодирование bind_param () кажется очень плохим способом обработки этого.

Я использую PHP версии 5.4.10

6

Решение

Здесь идет решение или актуальная проблема привязки переменного числа значений к подготовленному выражению mysqli:

<?php
$values = array('b','c','d');

$in  = str_repeat("?,", count($values));
$in  = trim($in, ",");

$sql = "SELECT * from users where username in($in)";
$stm = $con->prepare($sql);

$types = str_repeat("s", count($values));

if (strnatcmp(phpversion(),'5.3') >= 0)
{
$bind = array();
foreach($values as $key => $val)
{
$bind[$key] = &$values[$key];
}

} else {

$bind = $values;
}

array_unshift($bind, $types);
call_user_func_array(array($stm, 'bind_param'), $bind);

#var_dump($sql, $types, $bind, $con->error);

$stm->execute();
$res = $stm->get_result();
while($row = $res->fetch_assoc()) var_dump($row);

Комментируемая строка предназначена только для тестирования разработки. Очень полезно.

Но вашей первоначальной проблемой было отсутствие сообщений об ошибках.

Это испортило вас не только в этом конкретном случае, но и весь ваш опыт работы с PHP.
Каждый раз, когда что-то идет не так, PHP сообщит вам — что случилось и кого винить. Только если ты позволишь это. И ты всегда должен.

Вы можете прочитать это ответ об основах сообщения об ошибках

Имея сообщение об ошибке, вы можете просто найти его в Google и найти решение за считанные секунды. Или, по крайней мере, вы будете знать, какая у вас проблема. Что на самом деле поведение call_user_func_array() функция, которая была внезапно изменена.

14

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]