На моем сайте я выполняю SQL-запрос для заполнения информации. Раздел кода, делающий так:
$user = mysqli_real_escape_string(db_connect(),$_SESSION['UserName']);
$sqlStr = "SELECT * FROM tbl WHERE username='{$user}'";
$out = mysqli_query(db_connect(), $sqlStr);
$settings = False;
if(!(0 == mysqli_num_rows($out))){
$settings = True;
$res = mysqli_fetch_assoc($out);
}
Который должен возвращать только одну строку для данного пользователя. Тем не менее, выходной сигнал является чрезвычайно интересным. Для данного пользователя, который имеет запись в базе данных, вывод выглядит следующим образом:
mysqli_result Object ( [current_field] => 0 [field_count] => x [lengths] => Array ( [x] => x ) [num_rows] => 1 [type] => 0 )
Это правильно, но тогда, когда выполняется mysqli_fetch_assoc, результат будет следующим:
Array ( [COUNT] => 2 )
Я совершенно не понимаю, как он вообще возвращает COUNT, не говоря уже о 2 рядах. В базе данных нет даже 2 строк. Это происходит для любого имени пользователя.
Обходной путь был найден. Вывод итерируется с циклом while() заранее. Ниже приведен рабочий код:
$settings = False;
If(!(0 == mysqli_num_rows($out))){
$settings = True;
while($res = mysqli_fetch_assoc($out)){
$var = $res['var'];
break;
}
}
а затем с помощью $ var по всему сайту вместо $ res ['var']. Это правильно заполняет информацию. Это устраняет проблему, хотя я до сих пор не понимаю, в чем причина проблемы.
===
. Кроме того, в PHP логические значения имеют строчные значенияtrue
,false
, а неTrue
,False
поскольку они являются псевдонимами (но я разборчив).