2011-12-18 22 views
4

と私は、次の更新がありますPHP MySQLの挿入/更新クエリは、trueを返しますが、エラー

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

を私はいくつかの他の形式で同じ機能を使用するため、問題がquery_cust機能していないと確信しています彼らはうまくいく。とにかく、ここで(デバッグ情報のための2つ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

+0

本当ですか? as on http://php.net/manual/en/function.mysql-query.php "INSERT、UPDATE、DELETE、DROPなどの他のタイプのSQL文の場合、mysql_query()は成功した場合はTRUE、失敗した場合はTRUEを返しますエラー。" – AlenBer

+0

おっと、私の悪い、申し訳ありません:) – TimWolla

答えて

2

mysql_query戻りtrueを提供する必要があります。変更:

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

へ:

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

ありがとうcbuckley :)これは問題を解決しました。 Btw。私はオンラインチュートリアルからquery_cust関数を取得したので、私はあなたがちょうど助けた唯一のものではないと確信しています:) – AlenBer

2

選択クエリではなく、更新クエリを実行しています。更新が成功したのでtrueを返します。しかし、mysql_fetch_array()でフェッチするものはありません。あなたが何かを選択したい場合は、クエリが結果セットを返さない場合

あなたが選択クエリ:) the documentationパー

関連する問題