2015-07-28 6 views
-2

Я пытаюсь сохранить строки, пытаясь определить переменную в isset(). В настоящее время единственный способ, которым я мог бы сделать эту работу следующим образом:Определение переменной внутри функции isset

$setpass_accinfo = $dbconn->query("SELECT id,name,password FROM users WHERE id=" . $dbconn->real_escape_string(_GET('id'))); 
$setpass_accinfo_row = isset($setpass_accinfo->num_rows) ? $setpass_accinfo->fetch_assoc() : false; 

Итак, я пытаюсь объединить эти две строки в одну, если вы знаете, что я имею в виду. Нечто подобное, например:

$setpass_accinfo = isset(($setpass_accinfo = $dbconn->query("SELECT id,name,password FROM users WHERE id=" . $dbconn->real_escape_string(_GET('id'))))->num_rows) ? $setpass_accinfo->fetch_assoc() : false; 

Вопрос заключается в том, что он дает мне ошибку об использовании $setpass_accinfo, и я не знаю, как это исправить, или, если это вообще возможно. Есть предположения?

+0

echo/var_dump '$ setpass_accinfo' и что вы получаете? тот же для '$ setpass_accinfo_row' –

ответ

1

Вы можете использовать это:

$setpass_accinfo_row = $dbconn->query("SELECT ...")->fetch_assoc() ?: false; 
  • $dbconn->query() возвращает MySQLi результат
  • $dbconn->query()->fetch_assoc() возвращается:
    • ассоциативный массив, который соответствует извлеченной строке
    • NULL, если ни одна строка не была Найдено
  • ?: является короче формой тройного оператора, который, в данном случае, возвращает массив или false

Обратите внимание, что он не проверяет, если запрос выполнен успешно.

+0

Если, например, 'id' является' ab' и должен быть только числом, он будет отображаться ошибка 'Fatal error: вызов функции-члена fetch_assoc() для не-объекта в .'. Может ли это быть обработано тоже? –

+0

Тогда вы можете использовать другой ответ, но вы можете пропустить проверку'! empty'. Тернарный оператор проверяет тупичность выражения и false ... –

+0

'$ setpass_accinfo_row = ($ setpass_accinfo = $ dbconn-> query (" SELECT ... "))? $ Setpass_accinfo-> fetch_assoc(): false;' –

2

Это может получить немного грязный на время, но:

$setpass_accinfo_row = !empty($setpass_accinfo = $dbconn->query("SELECT id,name,password FROM users WHERE id=" . $dbconn->real_escape_string(_GET('id')))) ? $setpass_accinfo->fetch_assoc() : false; 

Невозможно открыть использовать Исеть() в результате выражения
При использовании одного равны, если заявление, то переменная $ присваивается значение правой части равенства, тогда переменная оценивается в empty(), в этом случае. И приоритет диктует, что он определен до достижения тройной операции.

+0

Он тоже не работает, он говорит, что есть неожиданное '='. –

+0

отсутствует кронштейн или слишком много –

+0

Нет отсутствующего кронштейна. –

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