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の世界)からそうではないので、あなたの答えと私の愚かなサブ質問を掲示している間に慈悲を持ってください:)ありがとう。

4
本気ですか? php.net/manual/en/function.mysql-query.php "他のタイプのSQL文の場合、INSERT、UPDATE、DELETE、DROPなど、mysql_query()は成功した場合はTRUEを返し、エラーの場合はFALSEを返します。
追加された 著者 AlenBer,
WHOLEデータセットを選択し、$ rows変数を使用して制限する代わりに、LIMIT mysql文を使用して、実際に必要な行だけを取得する必要があります。それ以外の場合は、サーバーをすぐにハングアップします。
追加された 著者 Your Common Sense,
それは真実を返すべきではありません。リソースを返す必要があります。
追加された 著者 TimWolla,
おっと、私の悪い、申し訳ありません:)
追加された 著者 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;
2
追加された
ありがとうcbuckley :)これは問題を解決しました。 Btw。私はオンラインチュートリアルからquery_cust関数を取得したので、私はあなたがちょうど助けた唯一のものではないと確信しています:)
追加された 著者 AlenBer,

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

あなたが選択クエリを提供する必要があるものを選択したい場合:)

2
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com