6

mysqli の概要ページには、私を mysqli 領域に誘い込むための利点のリストがあります。それらの多くの意味さえ理解していませんが、私にとって非常に興味深いのは、強化されたデバッグ機能です。

私の経験によると、準備されたステートメント (主に mysqli 機能と見なされ、主に使用される mysqli 機能) は、動的 SQL のデバッグをかなり困難にします。準備されたクエリから通常のクエリをコンソールにコピーすることはできません。
ですから、これらの機能とは何か、そしてそれらをどのように使用するかを知りたいと思っています。
それはSQLのデバッグ中ですか、それとも何か他のものですか?
それの使い方?
実際のユースケースとは?

4

2 に答える 2

5

私はそれがこれらを参照していると思います:

これらは mysql api には存在せず、mysqli にのみ存在します。

とりわけ、トレース ファイルを作成できます

mysqli_debug("d:t:o,/tmp/client.trace");

トレースは、MySQL の内部動作のデバッグに関するものであると理解しています。MySQL の動作に問題があると思われる場合は、これを使用できます。SQL のデバッグには、たとえトレースがそれらを示していたとしても、より軽量な手段を使用します。

このページで、このようなトレース出力の例を確認できます。

于 2013-02-03T09:58:45.433 に答える
1

プリペアドステートメントについては、理論的には、パラメータを送信する前に、kweryのフォーマットが正しくないことがわかります。したがって、バグがあるのはクエリなのかユーザーデータなのかを考える必要はなく、すぐにわかります。

一般的なクエリについては、mysqliはMySQL5と同期しているのに対し、mysql_ oldAPIはMYSQL4までしかサポートしていないため、より適切なエラーメッセージ、または少なくとも最もわかりやすいメッセージが表示されます。

さらに、try \ catch構文を使用してmysqlエラーを検出でき、or die....またはの代わりに例外を処理する方が簡単if(mysql_error())です。

あなたが持っているドキュメントから:

<?php
define("MYSQL_CONN_ERROR", "Unable to connect to database.");

// Ensure reporting is setup correctly
 mysqli_report(MYSQLI_REPORT_STRICT);

    // Connect function for database access
   function connect($usr,$pw,$db,$host) {

   try {
       $mysqli = new mysqli($host,$usr,$pw,$db);
       $connected = true;
    } catch (mysqli_sql_exception $e) {
       throw $e;
    }
}

try {
   connect('username','password','database','host');
   echo 'Connected to database';
} catch (Exception $e) {
    echo $e->errorMessage();
} 

mysqli_report(MYSQLI_REPORT_STRICT)ドキュメントによると、重要な機能は次のとおりです。

MYSQLI_REPORT_STRICT

Throw a mysqli_sql_exception for errors instead of warnings.

mysqli_debugeisが言ったように関数/メソッドもあります。

于 2013-02-03T09:52:19.523 に答える