php中的空字符串返回资源ID

时间:2013-06-26 06:55:33

标签: php sql

我有这个php:

$description = mysql_query(utf8_decode("SELECT `typealertesecmar` FROM `Opérations n°" . $row['idops'] . "` WHERE `typealertesecmar`!='' ORDER BY `id` DESC LIMIT 1")) or die(mysql_error());
    $row6 = array();

    while($row7 = mysql_fetch_assoc($description)) {
        $row6[] = $row7;
    }
    foreach($row6 as $row7) { 
        $description = utf8_encode(stripslashes($row7['typealertesecmar']));
    }

这段代码告诉我最后一个非空的'typealertesecmar'。 对于其他几个字段重复此代码

在我尝试这样做之后

if (empty($description) && empty($complement) && empty($nbperso) && empty($infrapec) && empty($rempec) && empty($remrsm)) {
    echo "<td>Aucune Information sur l'opération n'est disponible.</td>";
  }
  elseif (empty($description) && empty($complement) && empty($nbperso) && empty($infrapec) && empty($rempec)) {
    echo"<td>Description RSM : " . $remrsm . "</td>";
  }

等..对于所有字段我尝试验证字段是否为空以回显字符串。 但是为空字段返回多个“资源ID#”

请帮忙!

1 个答案:

答案 0 :(得分:1)

mysql_query()不直接返回数据,它返回一个资源标识符,可用于从结果集中获取行。

建议改为:

$description = ''; // default blank value
$result = mysql_query(utf8_decode("SELECT `typealertesecmar` FROM `Opérations n°" . $row['idops'] . "` WHERE `typealertesecmar`!='' ORDER BY `id` DESC LIMIT 1")) or die(mysql_error());
$row6 = array();

if($result && mysql_num_rows($result) > 0) {
    while($row7 = mysql_fetch_assoc($result)) {
        $row6[] = $row7;
    }
}

现在,$description将是一个空字符串,如果在查询中找不到任何结果,$row6将是一个空数组。


旁注:mysql_*库早已被弃用,请考虑升级到PDO或MySQLi。您的查询中有参数,因此可能存在Second Order SQL Injection漏洞。此查询将是PDO或MySQLi中准备语句的良好候选者。