我刚刚将基于自定义CMS的网站迁移到新服务器。迁移后,我在整个管理区域收到通知和警告,可以在其中编辑内容。
Notice: Trying to get property of non-object in database.php on line 69
Notice: Undefined index: in database.php on line 69
以下是该过程中使用的功能:
function dbQuerySafener($query,$params=false) {
$link= db_connect();
if ($params) {
foreach ($params as &$v) {
$v = mysqli_real_escape_string($link,$v);
}
$sql_query = vsprintf( str_replace("?","'%s'",$query), $params );
} else {
$sql_query = $query;
}
return $sql_query;
}
// query returning ARRAY (many rows)
function dbArray($query,$params=false) {
$link= db_connect();
$table_result=array();
$r=0;
$sql = dbQuerySafener($query, $params);
$result = mysqli_query($link,$sql) or die(mysqli_error($link)."
<br>".$sql);
while($row = mysqli_fetch_assoc($result)) {
$arr_row=array();
$c=0;
while ($c < mysqli_num_fields($result)) {
$col = mysqli_fetch_field($result);
$arr_row[$col -> name] = $row[$col -> name]; // line 69
$c++;
}
$table_result[$r] = $arr_row;
$r++;
}
return $table_result;
}
它的工作原理如下: SQL查询将传递给dbArray函数,例如:
$sql = "SELECT `id`, `emailAddress`, `name` FROM `gcms_users`
WHERE `active`=?";
$data = dbArray($sql, array(1));
预期结果: 以上两个函数将从数据库中获取结果,该数据库应包含字段名称及其值,例如:
Array ( [0] => Array ( [id] => 1 [emailAddress] => admin@email.com
[name] => John ) [1] => Array ( [id] => 1 [emailAddress] =>
paul@email.com [name] => Paul ) )
实际结果:
Array ( [0] => Array ( [id] => 1 [emailAddress] => admin@email.com [name] => John ) [1] => Array ( [] => ) )
在获取行时dbArray()函数存在一些问题,但我没有得到这里缺少的内容。我们将非常感谢您的帮助。
谢谢。
答案 0 :(得分:1)
mysqli_fetch_field的指针在第一次没有重置时,请尝试
在 mysqli_field_seek($result, 0);
之后 $r++;
答案 1 :(得分:0)
你无法重新循环mysqli_num_fields()。您可以先获取列,然后循环遍历数据。
function dbArray($query,$params=false) {
$link= db_connect();
$table_result=array();
$r=0;
$sql = dbQuerySafener($query, $params);
$result = mysqli_query($link,$sql) or die(mysqli_error($link)."
<br>".$sql);
$columns = array();
while($col = mysqli_num_fields($result)) {
$columns[] = $col->name;
}
while($row = mysqli_fetch_assoc($result)) {
$arr_row = array();
foreach($columns as $col){
$arr_row[$col] = $row[$col];
}
$table_result[$r] = $arr_row;
$r++;
}
return $table_result;
}