2011-12-18 99 views
4

我有以下更新:PHP MySQL的插入/更新查询返回true,但错误

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

我敢肯定,这个问题是不是在query_cust功能,因为我在一些其他形式使用相同的函数他们工作得很好。总之,这里的定义是(有两个var_dumps的调试信息):

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 

我担心的是,它返回布尔(真)但是(如果我错了,请纠正我)一个不可忽视的警告!?当我手动将更新查询复制到例如PHPmyAdmin时,它可以工作(用户具有表更新/插入权限)。

只是几个信息给任何人有同样的问题:本地代码运行没有任何问题(即使'error_reporting = E_ALL'启用),但在测试环境(Godaddy的托管)执行时,警告显示。

PS:我不是那么喜欢PHP(我来自JAVA世界),所以请在发布您的答案和我的愚蠢的子问题时有怜悯:)谢谢。

+1

它不应该返回true。它应该返回一个资源。 – TimWolla 2011-12-18 21:15:43

+0

你确定吗?至于http://php.net/manual/en/function.mysql-query.php “对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等,mysql_query()在成功或FALSE时返回TRUE错误。” – AlenBer 2011-12-18 21:19:07

+0

哎呀,我的坏,对不起:) – TimWolla 2011-12-18 21:19:54

回答

2

the documentationmysql_query返回true如果查询不返回一个结果。变化:

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

到:

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

谢谢cbuckley :)这解决了这个问题。顺便说一句。我从一个在线教程中获得了query_cust函数,所以我确定我不是唯一一个帮助你的人:) – AlenBer 2011-12-18 21:31:02

2

您正在运行更新查询,而不是选择查询。所以它返回true,因为更新成功。但是没有什么可以用mysql_fetch_array()来获取。

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