До недавнего времени я использовал mysql_real_escape_string()
для исправления большинства моих переменных перед выполнением SQL-запросов в моей базе данных. Друг сказал, что вместо этого я должен использовать подготовленные инструкции PDO, поэтому, прочитав немного о них, я перехожу к ним.Получить количество строк из оператора выбора Эффективно
До сих пор я столкнулся с одной проблемой при переключении, и это подсчет строк, возвращаемых оператором SELECT
. Иногда в моем коде я запускал SQL-запрос, а затем подсчитывал количество строк, возвращаемых из инструкции SELECT
. В зависимости от того, вернется ли результирующий набор, я буду принимать разные действия. Иногда мне нужно использовать набор результатов. MySQL дал мне перейти на mysql_fetch_assoc()
после mysql_num_rows()
без проблем. Однако PDO, похоже, не имеет ничего подобного mysql_num_rows()
.
Я читал ответы на SO, которые дали мне решение, либо использовать COUNT()
в инструкции SQL, либо использовать функцию PHP count()
в результирующем наборе. COUNT()
будет работать нормально в SQL-заявлении, если мне не нужен набор результатов в некоторых местах, однако несколько человек упомянули, что использование count()
в результирующем наборе довольно неэффективно.
Итак, мой вопрос: как мне это сделать, если мне нужно подсчитать количество выбранных строк (если они есть), а затем запустить скрипт с набором результатов? Использует ли count()
в результирующем наборе единственный способ в этом случае, или есть более эффективный способ сделать что-то?
Ниже приведен краткий пример того, что похоже на мой предыдущий код SQL:
$query=mysql_query('SELECT ID FROM Table WHERE Name='Paul' LIMIT 1);
if(mysql_num_rows($query)>0)
{
print_r(mysql_fetch_assoc($query));
}
else
{
//Other code.
}
Спасибо.
EDIT
Я знаю, что вы используете fetchAll()
заявление перед подсчетом набора результатов (что дает мне то, что мне нужно), но я просто пытаюсь выяснить, наиболее эффективный способ сделать вещи.
В руководстве указано, что он не работает для всех баз данных.Полагаю, это не помешает попробовать, я просто согласился с тем, что моя база данных, вероятно, не сработает с ней. Попробует. – Phillip
Он сделал работу, спасибо за подсказку. – Phillip