2017-08-03 8 views
1

次の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); 

    } 

} 

?> 
+0

'エラーを明らかにし、' mysqli_error($リンク)を使用します。また、あなたのコードはSQLインジェクションに対して脆弱です。再検討してください。 – Raptor

+0

もしあなたがifの中でコードを実行するだけなら、つまりそのセクションを新しいファイルにコピーするか、または既存のifをコメントアウトしてページを直接実行すれば、 "Ahha"の瞬間を得るかもしれません... – TimBrownlaw

+0

'echo 3 "エラーメッセージを表示し、接続にエラーがある場合は次のコード行を実行しないようにするには、' exit() 'または' die($ message) 'を追加する必要があります。 –

答えて

0

実行クエリ

/* execute query */  
    mysqli_query($link, $sql) or die(mysqli_error($link)); 
0
enter code here 
<?php 
$con=mysqli_connect("localhost","my_user","my_password","my_db"); 

// Check connection 
if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

// Perform a query, check for error 
if (!mysqli_query($con,"INSERT INTO Persons (FirstName) VALUES ('Glenn')")) 
{ 
echo("Error description: " . mysqli_error($con)); 
} 
mysqli_close($con); 
?> 

0

この幸運を試しながら、ここだ、これを試してみてくださいすべての参照するためのテスト最終的な作業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_STRICT); 

    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); 

    } 

} 

?> 
+0

質問に対するエラー処理以外で見つけた解決策では、ここで回答を結びつけることができませんでした。 – ASPiRE

0

あなたは次のように行うことができます。

try { 
    $link = mysqli_connect("domain", "username", "password","database"); 
} catch (Exception $e) { 
     echo $e; 
    exit; 
} 
関連する問題