Во-первых, небольшая лекция: встраивание строк непосредственно в ваши запросы в какой-то момент вызовет у вас проблемы (точнее, проблемы, связанные с внедрением SQL), постарайтесь избежать этого, если это возможно.Лично я использую библиотеку PDO PHP, которая позволяет связывать параметры, а не создавать строку.
Что касается вашего вопроса, я не уверен, что понял.Вы говорите, что он выполняет дополнительную работу, вы имеете в виду, что он возвращает правильные результаты, но неэффективно?Если это так, то это тоже можно решить с помощью PDO.Вот идея.
Шаг 1: Подготовьте свое утверждение, поместив заполнитель туда, где у вас есть $ e. Шаг 2: Переберите $ err, в теле цикла вы зададите для заполнителя значениетекущее значение $ e
Делая это, вы не только решаете проблему внедрения SQL-кода, но и можете избежать издержек, связанных с анализом и оптимизацией запроса при каждом его выполнении (хотя имейте в виду, что этов вашем конкретном случае это может быть не слишком затратно.)
Какой-то фактический код будет выглядеть следующим образом:
// Assume that $dbdriver, $dbhost and $dbname have been initialised
// somewhere. For a mysql database, the value for $dbdriver should be
// "mysql".
$dsn = "$dbdriver:host=$dbhost;dbname=$dbname";
$dbh = new PDO($dsn, $dbuser, $dbpassword);
$qry = "SELECT * from err_msgs WHERE id = :e"
$sth = $dbh->prepare($qry);
foreach ($err as $e) {
$sth->bindParam(":e", $e);
$sth->execute();
$row = $sth->fetch();
// Prints out the *second* field of the record
// Note that $row is also an associative array so if we
// have a field called id, we could use $row["id"] to
// get its value
echo "<li><span>".$row[1]."</span></li>";
}
Один последний момент, если вы хотите просто выполнить запрос один раз, вместо этоговыполнение его внутри цикла, это возможно, но, опять же, может не привести к улучшению производительности.Это может быть достигнуто с использованием синтаксиса IN.Например, если меня интересуют записи с идентификатором в наборе {5, 7, 21, 4, 76, 9}, я бы сделал:
SELECT * из err_msgs WHERE id IN (5, 7, 21, 4, 76, 9)
Я не думаю, что есть простой способ связать список с помощью PDO, чтобы вы использовали цикл для построения строки и затем выполняли запрос после цикла.Обратите внимание, что запрос, сформулированный таким образом, вряд ли даст вам заметное улучшение производительности, но он действительно зависит от ваших конкретных обстоятельств, и вам просто нужно попробовать его.