PHP MySQL插入/更新查询返回真,但有错误


PHP MySQL Insert/Update query returns true but with error

我有以下更新:

$conn->query_cust("update cms_users set last_login_date = now() where id = " . $_SESSION['USER_INFO']->id);

我确信问题不在query_cust函数中,因为我在其他一些形式中使用相同的函数,它们工作得很好。无论如何,下面是定义(用两个var_dumps表示debug-info):

function query_cust($s='',$rows=false,$organize=true) {
    var_dump($s);
    if (!$q=mysql_query($s,$this->con)) return false;
    if ($rows!==false) $rows = intval($rows);
    $rez=array(); $count=0;
    $type = $organize ? MYSQL_NUM : MYSQL_ASSOC;
    var_dump($q);
    while (($rows===false || $count<$rows) && $line=mysql_fetch_array($q,$type)) {
        if ($organize) {
            foreach ($line as $field_id => $value) {
                $table = mysql_field_table($q, $field_id);
                if ($table==='') $table=0;
                $field = mysql_field_name($q,$field_id);
                $rez[$count][$table][$field]=$value;
            }
        } else {
            $rez[$count] = $line;
        }
        ++$count;
    }
    if (!mysql_free_result($q)) return false;
    return $rez;
}

当执行时,我得到一个警告消息说:

string(57) "update cms_users set last_login_date = now() where id = 1" bool(true)
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/content/XX/XXXXXXX/html/core/mysql.php on line 26

让我担心的是,它返回bool(true),但(纠正我,如果我错了)一个不可忽略的警告!?当我手动复制更新查询到例如PHPmyAdmin它工作(用户有表更新/插入权限)。

对于有同样问题的人来说只是一些信息:本地代码运行没有任何问题(即使启用了'error_reporting = E_ALL'),但是当在测试环境(Godaddy的托管)上执行时,警告出现了。

PS:我对PHP不太感兴趣(我来自JAVA世界),所以在发布你的答案和我愚蠢的子问题时请怜悯:)谢谢。

根据文档,如果查询不返回结果集,则mysql_query返回true。变化:

if (!$q=mysql_query($s,$this->con)) return false;

:

if (!is_resource($q=mysql_query($s,$this->con))) return $q;

您正在运行更新查询,而不是选择查询。它返回true,因为更新成功了。但是mysql_fetch_array()没有任何东西可以获取。

如果你想选择一些东西,你需要提供一个选择查询:)