2016-04-04 8 views
0

私は使用しているAPIからデータを受け取ったときにDBを更新しています。MySqli UPDATE、エントリが存在しない場合を検出

そして私はvalueを自分のDBにはないものに変更しましたが、エラーが出るかどうかをテストしています。そうではなく、varがマッチしてDBが更新されたかのようにすべてが進んでいました。

これを確認するにはどうすればよいですか? MySQLのは(当然の構文スキーマに関連するものを除く)UPDATEにないリターンすべてのエラーをしているためエラーがない

foreach($message_id_array as $key=>$value) { 

$query = "UPDATE `sms_messages_tbl` 
SET `delivery2_api_to_enduser`= '1', 
`delivery2_response_time` = UTC_TIMESTAMP(), 
`delivery2_response_api_ip`= '".$ip."', 
`delivery2_response_from_api`= '".$message_status_array[$key]."' 
WHERE `transaction_sms_id` = '".$value."' "; 


if ($conn->query($query) === TRUE) {              
    echo ''.$message_status_array[$key].':'.$value.':OK';              
} else { 
    echo "Error updating record: " . $conn->error; 
}          
$conn->close();               
} 
+1

クエリを実行した後で、影響を受けた行を確認することができます。このリンクを参照してください。http://php.net/manual/en/mysqli.affected-rows.php – vmachan

答えて

1

が返さ。

phpMyAdminを使用していて、いくつかのダミー値を指定して同じアップデートを実行すると、success0 affected rowsが表示されます。

更新プログラムは正常に実行されましたが、要件を満たしていないため、行が影響を受けませんでした。

あなたは何が起こったかの明確なアイデアを得ることができるので、ちょうど、あなたは以下を使用して、影響を受けた行の数を探すことができます。

if ($conn->query($query) === TRUE) { 
    echo ''.$message_status_array[$key].':'.$value.':OK'; 
    echo $conn->affected_rows . ' affected'; 
} 

それは更新が大丈夫だったし、影響を受けた行の数があると言うだろう0

+0

これは 'if($ conn- > affected_rows == 0) '? – Borsn

+0

@Borsn、はい、 'if($ conn-> query($ query)&& $ conn-> affected_rows)'を実行できます。この方法で、それはうまく実行され、少なくとも1つのエントリに影響を与えたと確信しています。 – Eduard

+0

'($ conn-> query($ query)&& $ conn-> affected_rows)'それが何であるか分かりません。もう少し説明してください。 – Borsn

0

"Select * FROM table WHERE 'id' = $ value"というデータベースへの選択要求をお勧めします。

それから、mysqli_num_rowsを実行してください。結果が!= 0の場合は、SETクエリを実行します。

+0

しかし、私は2つのクエリを実行する必要があります。それはお勧めですか?それは私が最初にやろうとしたことです。しかし、私はそれが長くなることを心配しています...私のDBは大きく拡大します。 IDではなくクエリーが何度も何度も繰り返されます。 – Borsn

+0

あなたはおそらく私の行に影響を与える必要があります、私は本当にそれが好きではない、私にはより信頼できるようにseamseを選択してください。 http://php.net/manual/en/mysqli.affected-rows.php http://www.w3schools.com/php/func_mysqli_affected_rows.asp – Freddy

+0

申し訳ありませんが、影響を受ける行はSETでは動作しません。私は知っている – Freddy

関連する問題