Php 试图获取非对象和未定义索引错误的属性
我刚刚将一个基于自定义CMS的站点迁移到新服务器。迁移后,我在管理区域收到了各种通知和警告,在那里可以编辑内容Php 试图获取非对象和未定义索引错误的属性,php,mysqli,Php,Mysqli,我刚刚将一个基于自定义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) { $lin
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;
}
预期结果:
上述两个函数将从数据库中获取结果,该数据库应包含字段名及其值,例如:
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()函数有一些问题,但我不知道这里缺少什么。我们将非常感谢你的帮助
谢谢。您不能重新循环mysqli\u num\u字段()。您可以先获取列,然后遍历数据
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;
}
函数dbArray($query,$params=false){
$link=db_connect();
$table_result=array();
$r=0;
$sql=dbQuerySafener($query,$params);
$result=mysqli\u query($link,$sql)或die(mysqli\u error($link)。”
“$sql); $columns=array(); 而($col=mysqli\u num\u字段($result)){ $columns[]=$col->name; } while($row=mysqli\u fetch\u assoc($result)){ $arr_row=array(); foreach($列作为$col){ $arr_行[$col]=$row[$col]; } $table_结果[$r]=$arr_行; $r++; } 返回$table_结果; }
mysqli_fetch_字段的指针在第一次重置时未重置,请重试
mysqli\u field\u seek($result,0)代码>在$r++之后代码>检查MySQL错误。@Utkanos返回的是一个结果,但只有一行,这意味着获取行的代码有问题。@NigelRen这不是我的代码。我也试图理解它,但这是由其他人开发的定制CMS。我真的为你感到抱歉!产生错误的代码是逐字段复制一个结果,然后将其复制到另一个数组中,mysqli\u fetch\u all()
将在一行中执行。mysqli\u fetch\u all()
withmysqli\u ASSOC
返回一个关联数组。所以字段名是字段的键。这是正确的答案,谢谢你救了我一天。
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;
}