有一个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。
但我仍然没有看到这个问题!
提前致谢!
编辑: 不是错误,而是错误。
答案 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();
}