无法从MySql数据库获取数据

时间:2016-01-23 16:38:26

标签: php mysql xampp

有一个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更改为常量ID,如1或2。

但我仍然没有看到这个问题!

提前致谢!

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

2 个答案:

答案 0 :(得分:3)

请在此处查看此声明,

$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";
    }

?>

以下是相关参考资料:

答案 1 :(得分:0)

我很欣赏你现在有一个问题的答案,接下来的内容略微偏离了已被接受的目标,但是没有人提到过这里注入sql的可能性,所以这对你来说可能有用。

它使用OO方法处理mysqli操作并使用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();
}