31

PHPでは、ユーザー入力に依存する長いMySQLクエリを実行しようとしています。しかし、私のクエリは次のメッセージで失敗します、

"Query Failed".

実際、クエリが失敗するたびにこのメッセージを出力しましたが、この失敗の背後にある理由を探すのに苦労しています。残念ながら、ウェブページにエラーが明記されていないため、見つかりませんでした。失敗の原因となったエラーメッセージをWebページに表示する方法はありますか?

これが私のコードです、

$from = "Findings";
$where = "";

if ($service != null)
{
    $from = $from . ", ServiceType_Lookup";
    $where= "Findings.ServiceType_ID= ServiceType_Lookup.ServiceType_ID AND ServiceType_Name= ". $service;

    if ($keyword != null)
        $where= $where . " AND ";
}

if ($keyword != null)
{
    $where= $where . "Finding_ID LIKE '%$keyword%' OR
                     ServiceType_ID LIKE '%$keyword%' OR
                     Title LIKE '%$keyword%' OR
                     RootCause_ID LIKE '%$keyword%' OR
                     RiskRating_ID LIKE '%$keyword%' OR
                     Impact_ID LIKE '%$keyword%' OR
                     Efforts_ID LIKE '%$keyword%' OR
                     Likelihood_ID LIKE '%$keyword%' OR
                     Finding LIKE '%$keyword%' OR
                     Implication LIKE '%$keyword%' OR
                     Recommendation LIKE '%$keyword%' OR
                     Report_ID LIKE '%$keyword%'";
}

$query = "SELECT Finding_ID,
                 ServiceType_ID,
                 Title,
                 RootCause_ID,
                 RiskRating_ID,
                 Impact_ID,
                 Efforts_ID,
                 Likelihood_ID,
                 Finding,
                 Implication,
                 Recommendation,
                 Report_ID  FROM ".$from . " WHERE " . $where;

echo "wala 2eshiq";

$this->result = $this->db_link->query($query);
if (!$this->result) {
    printf("Query failed: %s\n", mysqli_connect_error());
    exit;
}

$r = mysqli_query($this->db_link, $query);
if ($r == false)
    printf("error: %s\n", mysqli_errno($this->db_link));
4

6 に答える 6

30

これを使って:

mysqli_query($this->db_link, $query) or die(mysqli_error($this->db_link)); 
# mysqli_query($link,$query) returns 0 if there's an error.
# mysqli_error($link) returns a string with the last error message

これを使用して、エラーコードを印刷することもできます。

echo mysqli_errno($this->db_link);

ここここを見てください

于 2012-09-01T12:19:39.547 に答える
13

以下を使用して、MySQLiのすべてのエラーレポートをオンにします

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

*注:これを実稼働環境で使用しないでください。

于 2014-07-16T18:30:29.560 に答える
7

関数die()を使用します:

or die(mysql_error());
于 2012-09-01T12:21:10.440 に答える
0

提案は、mysqliではなく標準のMySQLドライバー用であるため、機能しません。

$this->db_link->errorエラーが発生した場合はエラーが含まれます

または

mysqli_error($this->db_link)

動作します。

于 2012-09-01T12:27:16.957 に答える
-1

次のようなものを試してください。

$link = @new mysqli($this->host, $this->user, $this->pass)
$statement = $link->prepare($sqlStatement);
                if(!$statement)
                {
                    $this->debug_mode('query', 'error', '#Query Failed<br/>' . $link->error);
                    return false;
                }
于 2014-12-11T04:48:29.937 に答える
-1

便利なコード行は次のとおりです。

$sql = "Your SQL statement here";
$result = mysqli_query($this->db_link, $sql) or trigger_error("Query Failed! SQL: $sql - Error: ".mysqli_error($this->db_link), E_USER_ERROR);

dieこの方法は、開発と本番に使用できるため、よりも優れています。それは恒久的な解決策です。

于 2016-09-12T08:15:46.183 に答える