Я хочу сделать свою собственную функцию, которая работает аналогично следующему действительному коду.. 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;
}
}
?
Вы можете сделать свою специальную функцию еще проще:
function my_special_function($variable)
{
$sql = "SELECT field FROM table WHERE something='{$variable}'";
$res = mysql_query($sql);
return mysql_num_rows($res) > 0;
}
Я вижу несколько проблем.
Переменная интерполяция не выполняется в одинарных кавычках, также рекомендуется не подставлять переменную непосредственно в запросы.
$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
Да, это все для функции. Почему бы вам не попробовать такие вещи прежде, чем спросить, работает ли это или нет?
Вы должны добавить дополнительную проверку ошибок для mysql_query
и заменить $sql = 'SELECT field FROM table WHERE something=$variable';
на:
$sql = 'SELECT field FROM table WHERE something='.$variable;
if(somefunc() == FALSE)
совпадает с if(!somefunc())
. В руководстве по PHP есть хорошая таблица сравнения типов .
Я немного пересмотрю его
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;
}
FALSE
.if
на if(mysql_num_rows($res))
, поскольку mysql_num_rows()
вернет FALSE при сбое, а число - во всем остальном. Итак, если есть 0 затронутых строк или ошибка, вы не получите return TRUE
.$variable
return mysql_num_rows($res) > 0;
вам не нужно, если заявление ;-)
return (boolean)mysql_num_rows($res)