3

以下のすべての変数を確認し、プリペアドステートメントを使用してmysqlデータベースに挿入しようとしていますが、システムエラーが発生していなくても、データが挿入されません。$ insert_stmt->affected_rows> 0はfalseを返すため、カスタム警告メッセージが表示されます。

$insert_stmt = $db->prepare("INSERT INTO users (id,timestamp,externalid,password,authentication,email) VALUES(NULL,NOW(),?,?,?,?)");
$insert_stmt->bind_param("ssss",$userid,$hash,$authenticate,$email);
$insert_stmt->execute();
if ($insert_stmt->affected_rows>0)

私はPHP(およびコミュニティ)に少し慣れていませんが、何も挿入されず、カスタム警告メッセージが常に表示される理由を理解できませんか?この場合も、システムエラーは生成されません。ありがとう!

4

3 に答える 3

3

execute()が呼び出された ときにエラーが発生する可能性があります。ステートメントが成功した場合と失敗した場合execute()に戻ります。したがって、戻り値を確認してください。の場合は、問題に関する情報を求めてください。TRUEFALSEFALSEmysqli_stmt_error()

于 2012-10-14T05:17:00.993 に答える
1

次のことを行ってください。

1)このリンクを見てください:

2)データベースに接続した後、これを追加します。

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

3)prepare、bind、executeステートメントの周りにこのtry/catchブロックを追加します。

try { .. } and catch (Exception $e) { echo $e->getMessage(); }

4)表示されたエラーメッセージ(ある場合)を報告します

また、通話のエラーステータスを必ず確認してください。特に$insert_stmt->execute()

于 2012-10-14T05:17:00.900 に答える
1

私はその問題を理解しました。すでにデータベースにあるexternalidでテストしていましたが、重複する外部IDを防ぐためのチェックが正しく機能していなかったため、コードが挿入行に到達し、externalidがデータベースにすでに存在するときにMySQLに再度入れようとしました。 。externalidを一意のフィールドとして設定したため、入力できませんでした。ただし、E_ALL |を設定したときに、MySQLは目立ったエラーを返しませんでした。E_STRICT。将来的に知っておくとよいでしょう。

重複エントリでテストしていることに気づかなかったので、その情報の塊を追加してくれたコミュニティに申し訳ありません。

于 2012-10-14T19:05:49.437 に答える