使用:MySQL 5.1 + PHP 5.3.5
MySQL:
id in "table" is defined as: mediumint(6) zerofill not null
使用时我得到了预期的结果:
$mysqli->query("SELECT id FROM table WHERE id = 1");
while($row = $ret->fetch_array(MYSQLI_ASSOC)) $arr[] = $row;
>>> $arr[0]["id"] = 000001
但不是当我使用准备好的语句时:
$ret = $mysqli->prepare("SELECT id FROM table WHERE id = ?");
call_user_func_array(array($ret,"bind_param"),array("i",1));
$ret->execute();
$ret->store_result();
$meta = $ret->result_metadata();
$fields = $meta->fetch_fields();
$cols = array(); $data = array();
foreach($fields as $field) $cols[] = &$data[$field->name];
call_user_func_array(array($ret, 'bind_result'), $cols);
while($ret->fetch()) {
$row = array();
foreach($data as $key => $val) $row[$key] = $val;
$arr[] = $row;
}
>>> $arr[0]["id"] = 1
当直接在 MySQL 控制台中尝试准备好的语句时,它按预期显示(它不是 MySQL)。
根据 PHP mysqli_stmt::bind_result文档,我发现了这个:
根据列类型,绑定变量可以静默更改为相应的 PHP 类型。
我需要在后面的步骤中显示带有尾随零的数字,而不必这样做。zerofill 的字段非常多,并且从数据到屏幕的过程实际上是自动化的,因此尝试在此代码之后修复此问题,将需要市长进行更改。