Я использую подготовленный оператор, и эти функции являются частью класса mysqli. Они хорошо работают для сингл-состояния. Но не отвечайте на несколько условий следующим образом:[Решить] с использованием подготовленных операторов и динамического параметра в mysqli
SelectByOrderCondi('user','username=? AND name=? AND email=? ' , $Array)
Вот мои функции:
Добавить мой класс эту функцию:
Private function GetType($Item)
{
switch (gettype($Item)) {
case 'NULL':
case 'string':
return 's';
break;
case 'integer':
return 'i';
break;
case 'blob':
return 'b';
break;
case 'double':
return 'd';
break;
}
return '';
}
и изменить DynamicBindVariables функции следующим образом:
public function DynamicBindVariables($Statment, $Params)
{
if (is_array($Params) && $Params != null)
{
// Generate the Type String (eg: 'issisd')
$Types = '';
foreach($Params as $Param)
{
$Types .= $this->GetType($Param);
}
// Add the Type String as the first Parameter
$Bind_names[] = $Types;
// Loop thru the given Parameters
for ($i=0; $i<count($Params);$i++)
{
$Bind_name = 'bind' . $i;
// Add the Parameter to the variable
$$Bind_name = $Params[$i];
// Associate the Variable as an Element in the Array
$Bind_names[] = &$$Bind_name;
}
// Call the Function bind_param with dynamic Parameters
call_user_func_array(array($Statment,'bind_param'), $Bind_names);
}
else
{
$Types .= $this->GetType($Param);
$Statment->bind_param($Types ,$Params);
}
return $Statment;
}
Теперь он работает правильно
Вы должны распечатать свой результирующий оператор SQL для отладки. – Raptor
Зачем вам такая функция? Почему вы не можете сделать это просто «query» («SELECT * FROM user WHERE username =? AND name =? AND email =?», $ Array); 'Почему вы хотите ** обфускать свой собственный код? –
С самого начала я сказал, что эта функция является частью класса, и я хочу, чтобы в моем классе была выбрана только одна функция. Я думаю, что проблема заключается в типе $. Потому что, когда я отправляю его напрямую, правильно работает – majid