2017-03-08 4 views
1

mysqlの行を更新しようとするといくつかの問題が発生します。mysqli->クエリは更新時にtrueを返しますが、影響を受ける行はありません

私はクエリを印刷し、SQLクライアントで実行しようとしましたが、期待どおりに行を更新します。

このライン:

ます$ this-> mysqli->クエリ($クエリ);

bool(true)を期待どおりに返し、PHPのドキュメント(http://php.net/manual/en/mysqli.query.php)に従って正しいです。

失敗した場合はFALSEを返します。成功したSELECT、SHOW、DESCRIBEまたはEXPLAINクエリの場合、mysqli_query()はmysqli_resultオブジェクトを返します。他の成功したクエリの場合、mysqli_query()はTRUEを返します。

public function query($query, $parameters = array()) { 
    if ((is_array($parameters) && count($parameters) > 0) || (is_string($parameters) && !empty($parameters))) { 
     $this->lastPrepared = true; 

     if ($this->prepare($query) === false) 
      return false; 

     $this->bind((is_array($parameters) ? $parameters : array($parameters))); 
     if ($this->execute() === false) 
      return false; 
    } else { 
     $this->lastPrepared = false; 

     if (!$this->stmt = $this->mysqli->query($query)) { 
      debug('Query failed: (' . $this->mysqli->errno . ') ' . $this->mysqli->error); 
      return false; 
     } 
    } 

    return $this->stmt; 
} 

私の周りを検索し、私の質問に似た質問を見つけましたが、回答の非は私が解決策を見つけ助けたてきました。

編集:これで、$ this-> mysqli-> affected_rowsということが分かりました。 -1が返されます。これはエラーがあることを意味します。しかし、mysqli-> errnoとmysqli-> errorは空です。

私が実行しようとしているクエリは次のとおりです。

UPDATEがアクティブ= 0 WHERE ID = 1つのまたはID = 2

列SET payments_scheduled:

ID - タイプ:INT - 長さ:10 - 余分:符号なし、pk

アクティブタイプ:tinyint - 長さ:1 - 余分:符号なし

+0

私はクエリが表示されません..あなたのクエリの仕事は正しいかもしれませんが、行に一致しません.. – scaisEdge

+0

しかし、var_dump($クエリ);クエリ関数では、そのクエリをコピーし、それを私のSQLクライアントに貼り付けると、うまく動作します。したがって、問題の原因は上記の関数内になければなりませんか? –

+0

クエリを表示..より良いです.. – scaisEdge

答えて

0

問題が見つかりました。

私はメソッド内でトランザクションを開始していましたが、決してコミットしませんでした。

時間を無駄にしてしまったことをお詫びし、私が提供したコードを見て問題を理解することはできませんでした。問題がそのクエリメソッド内にあると確信していました(しかし、私は間違っていました)。

私はあなたを助けようとしている皆さん、皆さんに投票します。

2

0行を更新するのは失敗とはみなされません。つまり、選択基準に基づいて更新する行がないことを意味します。多くの場合、これは予想される動作であり、したがってtrueを返します。

+0

私は2行を更新しようとしています。私はクエリをコピーすると、それは私のSQLクライアントで正常に動作します。そして、影響を受けた行は-1ではなく-1を返しました。 –

+0

$ thisはあなたのmysqliオブジェクトではありませんか?したがって、$ this-> mysqli-> errnoの代わりに$ this-> errnoだけを実行しますか? – Ilion

+0

それ以上$ this-> query – Ilion

関連する問題