Эта тема на forum.dklab.ru


Сергей Айкинкулов: mysqli_fetch_fields & MYSQLI_NOT_NULL_FLAG
while($finfo = $res->fetch_field()){
if($finfo & MYSQLI_NOT_NULL_FLAG) $rows['finfo'][$finfo->name]['not_null'] = true;
else $rows['finfo'][$finfo->name]['not_null'] = false;
}

Ошибка:

"Notice: Object of class stdClass could not be converted to int in ..."

?? ..в мануале именно такой способ получения параметра поля "not_null"
Сергей Айкинкулов:
Множественые эксперименты + переписывание библиотеки доступа к БД на mysql(было на mysqli) показали, что вроде правильнее брать параметр NOT_NULL следующим способом:

$finfo->flags & MYSQLI_NOT_NULL_FLAG

но.. странная ситуация:

установка и отображение NOT_NULL-

в SQLyog - ставится и показывается все ок, так как по логике и должно быть
в phpMyAdmin - изменить параметр невозможно
посредством mysql_fetch_field получаю то же самое что показывает phpMyAdmin - везде допустимо NULL

это баг MySQL php-api?

...в SQLyog используется MySQL C-api
Сергей Айкинкулов:
Вот, сгородил, работает корректно:


while($finfo = $res->fetch_field()){
...
$data['finfo'][$finfo->name]['not_null'] = false;
$not_null[$finfo->orgtable.'.'.$finfo->orgname] = &$data['finfo'][$finfo->name]['not_null'];

if(!$tbl_names[$finfo->orgtable]) $tbl_names[$finfo->orgtable] = $finfo->orgtable;
}

foreach($tbl_names as $tbl_name){
if(!($res = $this->query('SHOW COLUMNS FROM '.$tbl_name))) return false;
while($finfo = $res->fetch_assoc()){
if($finfo['Null'] == 'NO') $not_null[$tbl_name.'.'.$finfo['Field']] = true;
else $not_null[$tbl_name.'.'.$finfo['Field']] = false;
}
}


:)

Эта тема на forum.dklab.ru