我有一些代码可以从一行中选择数据。它正在工作并正确打印结果,但我有一个我无法弄清楚的错误。
$rs=array();
$select=array ("system_name", "location", "alarmtype", "severity", "start_time", "end_time", "duration", "reason","shift_oparation", "system_oparation");
for ($i=0;$i<=9;$i++){
$SQL = "SELECT (".$select[$i].") FROM (".$is.") WHERE duration=('".$ic."') AND location=('".$id."')";
$result = mysql_query($SQL);
$db_field = mysql_fetch_array($result);
$rs[$i]=$db_field[$select[$i]];
echo $rs[$i];
}
Echo打印正确,但有错误:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given.
答案 0 :(得分:1)
我认为你的一些查询不会返回任何内容。为了消除警告,您应该检查$result
实际上是否是资源。
试试这个:
$rs=array();
$select=array ("system_name", "location", "alarmtype", "severity", "start_time", "end_time", "duration", "reason","shift_oparation", "system_oparation");
for ($i=0;$i<=9;$i++){
$SQL = "SELECT (".$select[$i].") FROM (".$is.") WHERE duration=('".$ic."') AND location=('".$id."')";
$result = mysql_query($SQL);
if($result){
$db_field = mysql_fetch_array($result);
$rs[$i]=$db_field[$select[$i]];
echo $rs[$i];
}
}
但是,如果只使用一个查询,则代码效率会更高。
答案 1 :(得分:0)
你做的事情很奇怪。看起来$select
是表中列的列表,您一次只能获取一列!
您可以使用此查询一次性选择所有内容:
$sql = "SELECT system_name, location, alarmtype, severity,
start_time, end_time, duration, reason, shift_oparation, system_oparation
FROM " . $is . " WHERE duration = '" . $ic . "' AND location = '" . $id . "'";
注意我删除了一些无关的括号。另外要非常小心,像这样动态构建SQL查询。我假设您知道$is
,$ic
和$id
的值,以防止SQL注入攻击,
运行结果,然后遍历行数组
$result = mysql_query($sql);
if ($result)
{
$row = mysql_fetch_array($result); //fetches the first result row as an array
// Can be accessed like $row['system_name']
foreach ($row as $key => $value)
echo $key, " = ", $value;
}
else
die(mysql_error() . $sql);
如果结果为false,它将执行die语句并打印出从MySQL返回的错误以及我们构建的查询,因此您可以看到它是否正确。
答案 2 :(得分:0)
警告:mysql_fetch_array()期望参数1是资源, 在。中给出的布尔值。
这意味着mysql查询produced errors。
返回值
对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他语句返回 resultset,mysql_query()在成功时返回资源,或者返回FALSE 错误。
使用mysql_error显示错误并查看错误原因。 e.g。
if(!$result){
echo mysql_error();
}
Protip :不要使用php手册中提到的mysql库
答案 3 :(得分:0)
select语句中存在问题请检查选择查询,或者您可以运行单个选择查询并检查输出