2016-11-07 4 views
0

Я следующий запросСледует ли использовать подготовленное заявление?

UPDATE users SET 
    username = CASE userid WHEN '1' THEN 'user1' WHEN '2' THEN 'user2' END, 
    email = CASE userid WHEN '2' THEN '[email protected]' WHEN '2' THEN '[email protected]' END 
WHERE userid IN ('1','2'); 

Будет ли использование подготовленного заявления будет лучше, если у меня есть тонны userid?

Как будет выглядеть подготовленный оператор для этого запроса? (Есть несколько полей, кроме имени пользователя и адрес электронной почты, поэтому он должен быть универсальным)

Будет ли это что-то вроде

$stmt->prepare('UPDATE users SET username = ?, email = ? WHERE userid = ?'); 

и привязывать и выполнить это заявление в цикле для всех значений в массиве?

** Мой запрос был создан с помощью петель, проходящих через массив значений

+0

подготовленные статусы делают, если вы используете параметр в своем запросе. Нет, если вы используете постоянные значения – Jens

+0

Итак, как будет выглядеть динамически созданный подготовленный оператор для таких запросов? –

+0

Подготовленный оператор или параметризованный оператор используются для повторного выполнения одного и того же оператора с высокой эффективностью. – Blueblazer172

ответ

0

Да. Определенно это сделает ваш код более понятным, а также избавит SQL-сервер от разбора такого большого запроса.

$sql = "UPDATE users SET username = ?, email = ? WHERE userid = ?"; 
$stmt = $mysqli->prepare($sql); 
$stmt->bind_param("sss", $username, $email, $userid); 
foreach ($whatever as $row) 
{ 
    $username = $row['username']; 
    $email = $row['email']; 
    $userid = $row['userid']; 
    $stmt->execute(); 
} 
+0

Итак, bind_param следует вызывать только один раз, а не внутри цикла? –

Смежные вопросы