Как мне сделать свою собственную функцию возврата true / false?

0

Я хочу сделать свою собственную функцию, которая работает аналогично следующему действительному коду.. ie

if(mysql_num_rows($res) == FALSE) {

  // DO SOMETHING BECAUSE THERE ARE NO RESULTS

}

В моем коде я повторяю инструкцию SQL несколько раз вокруг места, и если есть результаты, то я иду вперед и делаю вещи.

То, что я хотел бы сделать, это создать мой собственный возврат FALSE в моей собственной функции, т.е.

if(my_special_function($variable) == FALSE) {

    // DO STUFF

}

Это так же просто, как в моей специальной функции, имеющей что-то вроде...

function my_special_function($variable) {

   $sql = 'SELECT field FROM table WHERE something=$variable';
   $res = mysql_query($sql);

   if(mysql_num_rows($res) == FALSE) {

     return FALSE;

   } else {

     return TRUE;

   }
}

?

Теги:

4 ответа

3
Лучший ответ

Вы можете сделать свою специальную функцию еще проще:

function my_special_function($variable)
{
   $sql = "SELECT field FROM table WHERE something='{$variable}'";
   $res = mysql_query($sql);
   return mysql_num_rows($res) > 0;
}
  • 0
    Я думаю, что это наиболее просто, но я бы использовал приведение типов при возврате: return (boolean)mysql_num_rows($res)
  • 1
    faileN: В чем преимущество?
1

Я вижу несколько проблем.

Переменная интерполяция не выполняется в одинарных кавычках, также рекомендуется не подставлять переменную непосредственно в запросы.

   $sql = 'SELECT field FROM table WHERE something=$variable';

должен быть

   $sql = 'SELECT field FROM table WHERE something='.mysql_real_escape_string($variable);

mysql_num_rows возвращает false при возникновении проблемы, скажем, когда ее параметр недействителен resource. Если вы действительно хотите проверить случай отсутствия строк, вам нужно проверить его значение для 0

1

Да, это все для функции. Почему бы вам не попробовать такие вещи прежде, чем спросить, работает ли это или нет?

Вы должны добавить дополнительную проверку ошибок для mysql_query и заменить $sql = 'SELECT field FROM table WHERE something=$variable'; на:

$sql = 'SELECT field FROM table WHERE something='.$variable;
  • 0
    Думаю, я мог бы попытаться, я просто не знал, было ли это взломом или считал правильным кодирование. В прошлом я изобрел свой собственный способ делать вещи без проверки с хорошими программистами, такими как вы, только чтобы обнаружить, что это было угрозой безопасности или это работало только из-за ошибки в PHP или чего-то подобного. Поэтому здесь я пробуждаю новые вещи, поскольку то, что очевидно для вас, ребята, не так уж очевидно для меня. Ура !!
  • 0
    Это основные языковые конструкции. Вы должны познакомиться с ними. Отметим, что if(somefunc() == FALSE) совпадает с if(!somefunc()) . В руководстве по PHP есть хорошая таблица сравнения типов .
1

Я немного пересмотрю его

function my_special_function($variable) {
   $sql = "SELECT field FROM table WHERE something=$variable";
   $res = mysql_query($sql);

   if(mysql_num_rows($res)) {
     return TRUE;
   }
   return FALSE;
}

Изменения

  • Нет необходимости в else {...}, как если бы оценка if верна, она не будет идти дальше, если это не так, возвращается FALSE.
  • Изменен оператор if на if(mysql_num_rows($res)), поскольку mysql_num_rows() вернет FALSE при сбое, а число - во всем остальном. Итак, если есть 0 затронутых строк или ошибка, вы не получите return TRUE.
  • Внутри переменной $sql у вас были одинарные кавычки, вместо символа, переданного функции был передан литерал
$variable
  • 2
    если вы используете return mysql_num_rows($res) > 0; вам не нужно, если заявление ;-)
  • 0
    Да, но даже если что-либо, кроме 0 / false, равно true, OP может захотеть фактическое возвращаемое значение TRUE
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню