gpt4 book ai didi

php - CodeIgniter 3 MySQL 查询随机间歇性工作

转载 作者:行者123 更新时间:2023-11-28 23:33:24 25 4
gpt4 key购买 nike

我在 CI 模型中创建了一个函数,该函数首先查询表以获取其字段(因为这些字段会随时间动态变化,因此我无法对字段名称列表进行硬编码),然后当它获取第一次查询的结果,并建立一个字段名称列表,它再次查询表以获取属于一行或记录的值。然后将第二次查询结果存储在一个数组中,该数组传递回 Controller 。这里是执行这些步骤的完整函数:

public function getAssetFeatures($as_id)
{
$data = array();
//this sql query gets the field names from the table I want to query.
$sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '".DATABASE."' AND TABLE_NAME = 'as_features';";
$query = $this->db->query($sql);
$count = 0;
foreach($query->result_array() as $k)
{
foreach($k as $kk=>$v)
{
if( $v != "as_features_id" &&
$v != "as_id" &&
$v != "cid" &&
$v != "lot_size" )
{
$features_array[$count] = $v;
$count++;
}
}
}
$features_string = implode(",",$features_array);
//I got the field names, put them into an array, then concatenated them into a string, which I will use for the fields in the next query:
$sql = "SELECT $features_string FROM as_features WHERE as_id='$as_id'";
$query = $this->db->query($sql);
//mandatory rooms/features:
foreach($query->result() as $row)
{
foreach($row as $k=>$v)
{
$data["$k"] = $v; //build an associative array with the values of each field for the one row I am querying
}
}
return $data; // return the associative array.
}

起初我以为我的表或 View 出了问题,但是当我通过刷新页面并输入完全相同的值来重复对模型函数的相同调用时,我注意到有时代码可以工作,而且我不会'得到错误“ undefined index ”。

所以我用这段代码输出了数组的结果:

echo "<pre>";
print_r($asset['features']);
echo "</pre>";

...对于使用完全相同的参数进行完全相同的操作,预期的输出有时只会成功执行,但并非总是如此,如下所示:

Array
(
[kitchen] => 1
[liv_area] => 0
[dining] => 1
[family] => 0
[bed] => 0
[bath] => 1
[half_bath] => 0
[parking] => 0
[car_storage] => 0
[pool] => 0
[miscellaneous] => 0
)

当查询返回一个结果集,然后返回一个填充的数组时,我的表单正常工作并且看起来很正常。但是,大多数时候查询失败,我得到的结果如下所示:

model function query returns empty result set

最佳答案

问题在于以下代码片段:

foreach($query->result() as $row)
{
foreach($row as $k=>$v)
{
$data["$k"] = $v; //build an associative array with the values of each field for the one row I am querying
}
}

它的工作方式是,对于返回的每个结果,它都会用相关键覆盖 $data。但是,因为 $query->result() 将返回您想要的行,然后返回 false,数组最终变成:$data[] = false; 即,将整个数组设置为 false/空。

如果将循环更改为,则对于 $query->result() 的 false 值将不会执行循环内的代码:

while ($row = $query->result())
{
// your code
}

值得注意的是,如果您打算从中返回不止一行,它将不起作用,因为它只会覆盖现有值。

关于php - CodeIgniter 3 MySQL 查询随机间歇性工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36600596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com