PHP在循环中的第一个查询失败
问题描述:
我正在写一些PHP代码,以允许外部只读访问MySQL数据库中的某些字段。PHP在循环中的第一个查询失败
我有一张表,每周有一个ID与每一天相关,我需要为每一天运行一个查询,获取一个序列化的PHP对象,操作它并将其作为JSON返回。
我的代码如下:
<?php
// Connect to DB
$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
mysqli_set_charset($link, DB_CHARSET);
$dayIds = ["Monday" => 3585,
"Tuesday" => 3586,
"Wednesday" => 3587,
"Thursday" => 3588,
"Friday" => 3589,
"Saturday" => 3590,
"Sunday" => 3591];
$dayData = [];
// Iterate over days
foreach($dayIds as $day => $dayId){
// Create SQL
$sql = "select value from table_meta where day_id=".$dayId;
echo $sql."<br><br>";
$result = mysqli_query($link, $sql);
// Get Result
$new_data = [];
$row = mysqli_fetch_row($result);
$data = unserialize($row[0]);
// Manipulate Data and add it to the new_data array
//
// (Hidden for confidentiality reasons)
//
$dayData[$key] = $new_data;
echo json_encode($new_data)."<br><br>";
}
的问题是,第一次查询总是失败(返回false),我试过切换周一和周二的顺序在阵列中,然后周一作品周二失败。
当我尝试循环unserialised结果时,它给出错误“Warning:foreach()提供的无效参数”。
为了解决这个问题,我在$ dayIds数组的顶部添加了另一个元素并且它正在工作,但是由于这段代码要去一个客户端,我想解决第一个失败的原因。
在此先感谢。
答
$row = mysqli_*
需要在$data
之前。
$data = unserialize($row[0]);
$row = mysqli_fetch_row($result);
答
在从数据库中获取数据之前,您正在反序列化数据。 你的代码看起来应该是这样
$row = mysqli_fetch_row($result);
$data = unserialize($row[0]);
你有看'mysqli_error($链接)的结果;'? – rickdenhaan
奇怪的是'$ data = unserialize($ row [0]);''$ row = mysqli_fetch_row($ result);''之前''。 – Sean
[为foreach()提供的无效参数可能重复](https://stackoverflow.com/questions/2630013/invalid-argument-supplied-for-foreach) –