次のPHPコードが機能します。私はちょうどカスタム方法でそのエラーを処理することができないようです。例えばPHP MySQLiの接続とクエリのエラー処理。どうやって?
私は意図的にダウンしたデータベースのコード「3」を返すように接続文字列に何かを間違えたときに、私のAJAXスクリプトが永遠にbeforeSendでハング...
これは私が得たものである:
<?php
if(isset($_POST["postT_VAL"])) {
$client_id = $_POST["postCLIENT_ID"];
$project_id = $_POST["postPROJECT_ID"];
$mainsheet_id = $_POST["postMAINSHEET_ID"];
$field_name = $_POST["postT_ID"];
$field_value = $_POST["postT_VAL"];
$link = mysqli_connect("database.domain.com", "username1", "password1", "db220474");
if (!$link) {
/* return 3 = database offline */
echo "3";
} else {
/* build query */
$sql = "UPDATE tbl_mainsheet2 SET ".$field_name." = '".$field_value."' WHERE client_id = '".$client_id."' AND project_id = '".$project_id."' AND mainsheet_id = '".$mainsheet_id."'";
/* execute query */
mysqli_query($link, $sql);
/* return 0 = no update/1 = successful update */
echo "".mysqli_affected_rows($link);
/* close connection */
mysqli_close($link);
}
}
?>
新しい研究
よし。いくつかの研究の後、私はこれが機能することを発見した。 mysqliに例外をスローするように指示する必要があるようです。何らかの理由で、これはエラーを「IF」の方法で処理しようとするのとは異なります。改善のための提案?
mysqli_report(MYSQLI_REPORT_STRICT);
try {
$link = mysqli_connect("database.domain.com", "username1", "password1", "db220474");
} catch (Exception $e) {
echo "3";
exit;
}
コード更新
ここだすべての参照するためのテスト最終的な作業PHPソリューションです。
<?php
/* Status Codes
return 0 = Nothing to Update
return 1 = Successful Update Query
return 2 = Database Connection refused
return 3 = MySQL Query Error OR Wrong URL Parameters */
mysqli_report(MYSQLI_REPORT_OFF);
if(isset($_GET["postT_VAL"])) {
$client_id = $_GET["postCLIENT_ID"];
$project_id = $_GET["postPROJECT_ID"];
$mainsheet_id = $_GET["postMAINSHEET_ID"];
$field_name = $_GET["postT_ID"];
$field_value = $_GET["postT_VAL"];
try {
$link = mysqli_connect("domain", "username", "password", "database");
} catch (Exception $e) {
// echo "".$e->getCode();
/* return 2 = Database Connection refused */
echo "2";
exit;
}
/* Build dynamic Update Query string */
$sql = "UPDATE tbl_mainsheet2 SET ".$field_name." = '".$field_value."' WHERE client_id = '".$client_id."' AND project_id = '".$project_id."' AND mainsheet_id = '".$mainsheet_id."'";
/* Execute Update Query */
if(!mysqli_query($link, $sql)) {
echo "3";
/* Close Connection */
mysqli_close($link);
exit;
} else {
/* return 0 = Nothing to Update/1 = Successful Update Query */
echo "".mysqli_affected_rows($link);
/* Close Connection */
mysqli_close($link);
}
}
?>
'エラーを明らかにし、' mysqli_error($リンク)を使用します。また、あなたのコードはSQLインジェクションに対して脆弱です。再検討してください。 – Raptor
もしあなたがifの中でコードを実行するだけなら、つまりそのセクションを新しいファイルにコピーするか、または既存のifをコメントアウトしてページを直接実行すれば、 "Ahha"の瞬間を得るかもしれません... – TimBrownlaw
'echo 3 "エラーメッセージを表示し、接続にエラーがある場合は次のコード行を実行しないようにするには、' exit() 'または' die($ message) 'を追加する必要があります。 –