gpt4 book ai didi

php - 如何检查 mysqli_fetch_array($result,MYSQLI_NUM) 是否成功获取?

转载 作者:行者123 更新时间:2023-12-04 07:40:33 25 4
gpt4 key购买 nike

我是 php 学习程序风格的初学者。学习编写Statements和Mysqli。
我正在尝试学习如何检查获取行是否成功或有问题。注意:我不是在查询我的 mysql 数据库中的关键字后检查是否有匹配的行。不。要搜索搜索结果,您通常使用 mysqli_stmt_num_rows()。但我使用 COUNT 函数。像这样:

$query = "SELECT COUNT(id) From links WHERE keyword = ?";
$stmt = mysqli_stmt_init($conn);
if(mysqli_stmt_prepare($stmt,$query))
{
mysqli_stmt_bind_param($stmt,'s',$keyword);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt,$row_count);
if($result = mysqli_stmt_fetch($stmt))
{
echo 'Row Count: ' .$row_count; echo '<br>';
}
else
{
echo 'Record fetching failed!';
echo 'Error: ' .mysqli_stmt_error($conn);
echo 'Error: ' .mysqli_stmt_errno($conn);
}
mysqli_stmt_close($stmt);
}
else
{
echo 'Search Preparation Failed!';
}
mysqli_close($conn);
我只需要检查行是否被提取没有任何问题。需要知道在尝试获取它们时是否有任何问题。如果有任何麻烦,那么麻烦是什么。我需要 php 来告诉我这个。
这是我的尝试:
<?php
//5.
//MULTIPLE RECORDS FETCHING - mysqli_stmt_get_result(): mysqli_fetch_array().

//ERROR REPORTING.
ini_set('display_errors','1');
ini_set('display_startup_errors','1');
error_reporting(E_ALL);

//MYSQLI CONNECTION.
//BAREBONE TEMPLATE.
mysqli_report(MYSQLI_REPORT_ERROR|MYSQLI_REPORT_STRICT);

$server = 'localhost';
$user = 'root';
$password = '';
$database = 'bruteforce';

if(!$conn = mysqli_connect("$server","$user","$password","$database"))
{
echo 'Mysqli Connection Error' .mysqli_connect_error($conn);
echo 'Mysqli Connection Error Number' .mysqli_connect_errno($conn);
}

mysqli_set_charset($conn,'utf8mb4');

//QUERY DATABASE.
$keyword = 'keywords';

$query = "SELECT id,date_and_time,domain,domain_email,ip,url,anchor,title,description,keyword,keyphrase From links WHERE keyword = ?";
$stmt = mysqli_stmt_init($conn);
if(mysqli_stmt_prepare($stmt,$query))
{
mysqli_stmt_bind_param($stmt,'s',$keyword);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
while($col = mysqli_fetch_array($result,MYSQLI_NUM))
{
$id = $col['0'];
$url = $col['5'];
$title = $col['7'];
$description = $col['8'];
$keyword = $col['9'];

echo 'Id: ' .$id; echo '<br>';
echo 'Url: ' .$url; echo '<br>';
echo 'Title: ' .$title; echo '<br>';
echo 'Description: ' .$description; echo '<br>';
echo 'Keyword: ' .$keyword; echo '<br>';
}
//WHICH ONE OF THESE 15 IFs BELOW ARE VALID ?
//if($col == FALSE) //Output: Record fetching failed!Error: Error: 0
//if($col === FALSE) //Output: Blank
//if(!$col) //Output: Record fetching failed!Error: Error: 0
//if(!$col = mysqli_fetch_array($result)) //Output: Record fetching failed!Error: Error: 0
//if(!$col == mysqli_fetch_array($result)) //Output: Blank
//if(!$col === mysqli_fetch_array($result)) //Output: Blank
//if($col != mysqli_fetch_array($result)) //Output: Blank
//if($col !== mysqli_fetch_array($result)) //Output: Blank
//if($col !=== mysqli_fetch_array($result)) //Output: Parse error: syntax error, unexpected '=' in ...
//if(mysqli_fetch_array($result) == FALSE)//Output: Record fetching failed!Error: Error: 0
//if(mysqli_fetch_array($result) === FALSE) //Output: Blank

if(!mysqli_fetch_array($result))//Output: Record fetching failed!Error: Error: 0
//if(mysqli_fetch_array($result) != FALSE) //Output: Blank
//if(mysqli_fetch_array($result) !== FALSE) //Output: Record fetching failed!Error: Error: 0---
//if(mysqli_fetch_array($result) !=== FALSE) //Output: Parse error: syntax error, unexpected '=' in ...

{
echo 'Record fetching failed!';
echo 'Error: ' .mysqli_stmt_error($stmt);
echo 'Error: ' .mysqli_stmt_errno($stmt);
}
mysqli_stmt_close($stmt);
}
mysqli_close($conn);
?>
我知道有不止一种方法可以检查获取数据是否成功或不使用 mysqli。我正在尝试 15 种不同的方法来查看“mysqli_fetch_array($result,MYSQLI_NUM)”是否有效。我在我测试的 15 行中的每一行的注释上写下了我的实验结果。请注意我的代码底部附近的 15 个 IF,并指出这 15 个中所有有效的 IF。这样,我学到的编码方式不止一种。
作为奖励,不要介意向我展示比我的 15 个 IF 更好的检查方法,使用 mysqli 和准备好的语句。
谢谢你。
编辑:
在阅读了对我的问题的回复后,我意识到,尤其是从 Dharman 的回复中,没有必要检查 mysqli_fetch_array() 是否有任何问题。因此,当我问你们以下哪些 IF 是有效的时,我现在意识到它们都不是有效的:
//if($col == FALSE) //Output: Record fetching failed!Error: Error: 0
//if($col === FALSE) //Output: Blank
//if(!$col) //Output: Record fetching failed!Error: Error: 0
//if(!$col = mysqli_fetch_array($result)) //Output: Record fetching failed!Error: Error: 0
//if(!$col == mysqli_fetch_array($result)) //Output: Blank
//if(!$col === mysqli_fetch_array($result)) //Output: Blank
//if($col != mysqli_fetch_array($result)) //Output: Blank
//if($col !== mysqli_fetch_array($result)) //Output: Blank
//if($col !=== mysqli_fetch_array($result)) //Output: Parse error: syntax error, unexpected '=' in ...
//if(mysqli_fetch_array($result) == FALSE)//Output: Record fetching failed!Error: Error: 0
//if(mysqli_fetch_array($result) === FALSE) //Output: Blank

if(!mysqli_fetch_array($result))//Output: Record fetching failed!Error: Error: 0
//if(mysqli_fetch_array($result) != FALSE) //Output: Blank
//if(mysqli_fetch_array($result) !== FALSE) //Output: Record fetching failed!Error: Error: 0---
//if(mysqli_fetch_array($result) !=== FALSE) //Output: Parse error: syntax error, unexpected '=' in ...
我检查了很多教程。他们通常会展示这样的东西(达曼也展示过):
if(mysqli_stmt_prepare($stmt,$query))
{
mysqli_stmt_bind_param($stmt,'s',$keyword);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt))
while($col = mysqli_fetch_array($result,MYSQLI_NUM))
{
$id = $col['0'];
$url = $col['5'];
$description = $col['8'];
$keyword = $col['9'];

echo 'Id: ' .$id; echo '<br>';
echo 'Url: ' .$url; echo '<br>';
echo 'Description: ' .$description; echo '<br>';
echo 'Keyword: ' .$keyword; echo '<br>';
}
mysqli_stmt_close($stmt);
}
mysqli_close($conn);
请注意,在教程中,他们没有类似以下内容来检查 mysqli_stmt_get_result() 或 mysqli_fetch_array() 是否失败。
1.
if(!$result = mysqli_stmt_get_result($stmt))
  • if(!mysqli_fetch_array($result))
    但我仍然想检查这两行是否有问题。
    既然你们已经告诉我了,那么第一个问题就不会出错。关于第二个问题,我现在还有剩下的问题要问你。
    因此,我问:尝试使用 mysqli_stmt_get_result() 获得结果时是否有可能出错?如果是这样,那么如何检查呢?简而言之,以下哪些新 IF 是有效的(如果有)?
    //if($result == FALSE) //Output: Blank
    //if($result) === FALSE //Output: Parse error: syntax error, unexpected '===' (T_IS_IDENTICAL) in ..
    //if(!$result) //Output: Blank
    //if(!$result = mysqli_stmt_get_result($stmt)) //Output: Record fetching failed!Error: Error: 0
    //if(!$result == mysqli_stmt_get_result($stmt)) //Output: Record fetching failed!Error: Error: 0
    //if(!$result === mysqli_stmt_get_result($stmt)) //Output: Record fetching failed!Error: Error: 0
    //if($result != mysqli_stmt_get_result($stmt)) //Output: Blank
    //if($result !== mysqli_stmt_get_result($stmt)) //Output: Blank
    //if($result !=== mysqli_stmt_get_result($stmt)) //Output: Parse error: syntax error, unexpected '=' in ...
    //if(mysqli_stmt_get_result($stmt) == FALSE)//Output: Record fetching failed!Error: Error: 0
    //if(mysqli_stmt_get_result($stmt) === FALSE) //Output: Record fetching failed!Error: Error: 0
    这是脚本的新上下文:
    <?php
    //5.
    //MULTIPLE RECORDS FETCHING - mysqli_stmt_get_result(): mysqli_fetch_array().

    //ERROR REPORTING.
    ini_set('display_errors','1');
    ini_set('display_startup_errors','1');
    error_reporting(E_ALL);

    //MYSQLI CONNECTION.
    //BAREBONE TEMPLATE.
    mysqli_report(MYSQLI_REPORT_ERROR|MYSQLI_REPORT_STRICT);

    $server = 'localhost';
    $user = 'root';
    $password = '';
    $database = 'brute';

    if(!$conn = mysqli_connect("$server","$user","$password","$database"))
    {
    echo 'Mysqli Connection Error' .mysqli_connect_error($conn);
    echo 'Mysqli Connection Error Number' .mysqli_connect_errno($conn);
    }

    mysqli_set_charset($conn,'utf8mb4');

    //QUERY DATABASE.
    $keyword = 'keywordsd';

    $query = "SELECT id,date_and_time,domain,domain_email,ip,url,anchor,title,description,keyword,keyphrase From links WHERE keyword = ?";
    $stmt = mysqli_stmt_init($conn);
    if(mysqli_stmt_prepare($stmt,$query))
    {
    mysqli_stmt_bind_param($stmt,'s',$keyword);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    //WHICH OF THESE FOLLOWING IFs ARE VALID ?
    //if($result == FALSE) //Output: Blank
    //if($result) === FALSE //Output: Parse error: syntax error, unexpected '===' (T_IS_IDENTICAL) in ..
    //if(!$result) //Output: Blank
    //if(!$result = mysqli_stmt_get_result($stmt)) //Output: Record fetching failed!Error: Error: 0
    //if(!$result == mysqli_stmt_get_result($stmt)) //Output: Record fetching failed!Error: Error: 0
    //if(!$result === mysqli_stmt_get_result($stmt)) //Output: Record fetching failed!Error: Error: 0
    //if($result != mysqli_stmt_get_result($stmt)) //Output: Blank
    //if($result !== mysqli_stmt_get_result($stmt)) //Output: Blank
    //if($result !=== mysqli_stmt_get_result($stmt)) //Output: Parse error: syntax error, unexpected '=' in ...
    //if(mysqli_stmt_get_result($stmt) == FALSE)//Output: Record fetching failed!Error: Error: 0
    //if(mysqli_stmt_get_result($stmt) === FALSE) //Output: Record fetching failed!Error: Error: 0
    {
    die('mysqli_stmt_get_result() Failed!);
    }
    else
    {
    while($col = mysqli_fetch_array($result,MYSQLI_NUM))
    {
    $id = $col['0'];
    $url = $col['5'];
    $description = $col['8'];
    $keyword = $col['9'];

    echo 'Id: ' .$id; echo '<br>';
    echo 'Url: ' .$url; echo '<br>';
    echo 'Description: ' .$description; echo '<br>';
    echo 'Keyword: ' .$keyword; echo '<br>';
    }
    mysqli_stmt_close($stmt);
    }
    }
    mysqli_close($conn);
    echo '<b>'; echo __LINE__; echo '</b>'; echo '<br>';
    ?>

    最佳答案

    你的问题并不像人们想象的那么愚蠢。但是, 的可能性极小。获取 结果会失败。我曾尝试自己使此功能崩溃,但我始终无法实现。
    这不太可能,我建议不要担心它。只要您正确编写整个内容,代码就不会失败。如果你想彻底,可以调用mysqli_error()调用 mysqli_fetch_array 后立即看看是否有错误。 自动错误报告甚至没有涵盖这种情况,但万一出现问题 PHP 会显示警告 .如果您曾经看到“读取一行时出错”的警告,那么您很可能在 PHP 中发现了一个尚未发现的错误,而不是其他任何错误。
    所以,不要再担心这个功能了。

    附言你的代码充满了 cargo 崇拜的做法。根据经验,如果您启用了 mysqli 错误报告,那么您不需要检查任何函数的返回值。如果发生错误,PHP 会自动触发。函数调用失败且没有错误的可能性仍然很小,但是您不太可能在代码中不必担心它。
    这是同样的事情,但没有任何冗余代码进行清理:

    <?php

    //5.
    //MULTIPLE RECORDS FETCHING - mysqli_stmt_get_result(): mysqli_fetch_array().

    //ERROR REPORTING.
    ini_set('display_errors', '1');
    ini_set('display_startup_errors', '1');
    error_reporting(E_ALL);

    //MYSQLI CONNECTION.
    //BAREBONE TEMPLATE.
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    $server = 'localhost';
    $user = 'root';
    $password = '';
    $database = 'bruteforce';

    $conn = mysqli_connect($server, $user, $password, $database);

    mysqli_set_charset($conn, 'utf8mb4');

    //QUERY DATABASE.
    $keyword = 'keywords';

    $query = "SELECT id,date_and_time,domain,domain_email,ip,url,anchor,title,description,keyword,keyphrase From links WHERE keyword = ?";

    $stmt = mysqli_prepare($conn, $query);
    mysqli_stmt_bind_param($stmt, 's', $keyword);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    while ($col = mysqli_fetch_row($result)) {
    $id = $col[0];
    $url = $col[5];
    $title = $col[7];
    $description = $col[8];
    $keyword = $col[9];

    echo 'Id: ' .$id;
    echo '<br>';
    echo 'Url: ' .$url;
    echo '<br>';
    echo 'Title: ' .$title;
    echo '<br>';
    echo 'Description: ' .$description;
    echo '<br>';
    echo 'Keyword: ' .$keyword;
    echo '<br>';
    }

    关于php - 如何检查 mysqli_fetch_array($result,MYSQLI_NUM) 是否成功获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67502698/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com