【问题标题】:Not able to get data from MySql database [closed]无法从 MySql 数据库中获取数据 [关闭]
【发布时间】:2023-04-05 20:52:04
【问题描述】:

有一个 php 文件查询 MySql 数据库以获取一些信息,但 else 语句似乎执行任何条件。

require_once("../sqli_connect.php");

$id = $_GET["id"];

$query = "SELECT * FROM post WHERE post_id=".$id;

//echo $query."<br>";

$response = @mysqli_connect($dbc, $query);

if($response){
    $row = $response->fetch_assoc();

    echo "<h2>".$row["post_subject"]."</h2>";
    echo "<h4>".$row["post_by"]."</h4>";
    echo "<div>".$row["post_content"]."</div>";
}
else{
    echo "no response";
}

我什至尝试将查询中的 post_id 更改为像 1 或 2 这样的常量 id。

但我仍然没有看到问题!

提前致谢!

编辑: 不是错误而是错误。

【问题讨论】:

  • 错误说什么?
  • 它执行else语句
  • 您在 sql 语句末尾缺少一个结束 " 并且没有执行 sql
  • 当你在任何东西前面使用@,在这种情况下@mysqli_connect,它可以隐藏重要的错误信息。你应该以不同的方式处理错误。
  • 错误:mysqli_connect() 期望参数 1 为字符串

标签: php mysql xampp


【解决方案1】:

在此处查看此声明,

$response = @mysqli_connect($dbc, $query);

您没有执行查询。应该是,

$response = mysqli_query($dbc, $query);

并使用mysqli_num_rows() 函数检查它是否返回任何行。所以你的代码应该是这样的:

<?php

    require_once("../sqli_connect.php");

    $id = $_GET["id"];
    $query = "SELECT * FROM post WHERE post_id={$id}";

    $response = mysqli_query($dbc, $query);

    if(mysqli_num_rows($response)){
        while($row = $response->fetch_assoc()){
            echo "<h2>".$row["post_subject"]."</h2>";
            echo "<h4>".$row["post_by"]."</h4>";
            echo "<div>".$row["post_content"]."</div>";
        }
    }
    else{
        echo "no response";
    }

?>

以下是相关参考资料:

【讨论】:

  • 并且 $query = "SELECT * FROM post WHERE post_id=".$id."; 是一个语法错误。
  • @Fred-ii- OP 在中途批准了一个编辑。现在很难说这是 OP 的错字还是实际错误。顺便说一句,我没有注意到这一点,感谢您指出这一点。 :)
  • 我从不批准这样的编辑,除非 OP明确要求某人进行编辑。它可能会对提交答案的人产生不利影响,如果/当编辑被批准时,他们可能会因此而被否决。我已经多次看到这种情况发生; 称之为体验 ;-)
【解决方案2】:

我很感激您现在有了问题的答案,接下来的内容与已接受的内容略有偏差,但没有人在这里提到 sql 注入的可能性,因此这在某些时候可能对您有用。

它对mysqli操作使用OO方法并利用prepare statements

/* connection parameters */
$dbhost =   'localhost';
$dbuser =   'root'; 
$dbpwd  =   'xxx'; 
$dbname =   'xxx';  

$conn = new mysqli( $dbhost, $dbuser, $dbpwd, $dbname );

if( $conn ){
    /* assuming id is an integer */
    $id=!empty( $_GET['id'] ) ? intval( $_GET['id'] ) : false;

    if( $id ){
        /* set fields to be returned - variables are matched to placeholders `?` */
        $sql='SELECT `post_subject`,`post_by`,`post_content` FROM `post` WHERE `post_id`=?';
        $stmt=$conn->prepare( $sql );

        /* bind user supplied variable in a safe manner */
        $stmt->bind_param('i', $id );
        $res=$stmt->execute();

        if( $res ){
            /* prepare output variables */
            $stmt->bind_result( $subject, $by, $content );

            while( $stmt->fetch() ){/* iterate through recordset */
                echo "
                <h2>{$subject}</h2>
                <h4>{$by}</h4>
                <div>{$content}</div>"; 
            }
        } else {
            echo 'No response'; 
        }
    } else {
        echo 'missing id';  
    }
    $stmt->close();
    $conn->close();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 2021-02-26
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    相关资源
    最近更新 更多