Php 请检查MySQL查询

Php 请检查MySQL查询,php,sql,Php,Sql,我正在尝试使用MySQLi查询获取数据。 请检查我的SQL查询,我在If条件下遇到错误。 我在旁边加了一个错误 如果条件 当它显示在控制台中时 <?php $id = $_GET['id']; include("../include/connection_string.php"); $sql = mysqli_query($db, "SELECT pages, main_id FROM dhms_index_table where main_id='"+$id+

我正在尝试使用MySQLi查询获取数据。 请检查我的SQL查询,我在If条件下遇到错误。 我在旁边加了一个错误

如果条件

当它显示在控制台中时

<?php
    $id = $_GET['id'];
    include("../include/connection_string.php");


    $sql = mysqli_query($db, "SELECT pages, main_id FROM dhms_index_table where main_id='"+$id+"'");

    if(mysqli_num_rows($sql)){ // Showing error here " Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result"
        $data = array();
        while($row = mysqli_fetch_array($sql)){
            $data[] = array(
                'pages' => $row['pages'],
                'main_ID' => $row['main_id']
            );
        }
        header('Content-type: application/json');
        echo json_encode($data);
    }
    ?>
这条线

main_id='"+$id+"'
正在使用符号而不是点来连接。这就是实现这一点的JS/C方法。也许你来自那种背景,认为可以在PHP中使用它;你不能

所以

还要确保有
$id=$\u GET['id']的值

错误报告将告诉您是否正确

如果GET数组是一个整数(我很确定它是整数),那么最好使用
(int)

$id = (int)$_GET['id'];
并检查它是否已设置/是否为空

即:

这条线

main_id='"+$id+"'
正在使用符号而不是点来连接。这就是实现这一点的JS/C方法。也许你来自那种背景,认为可以在PHP中使用它;你不能

所以

还要确保有
$id=$\u GET['id']的值

错误报告将告诉您是否正确

如果GET数组是一个整数(我很确定它是整数),那么最好使用
(int)

$id = (int)$_GET['id'];
并检查它是否已设置/是否为空

即:


您的问题很可能是由以下查询语法错误引起的:

main_id='"+$id+"'
换成这样,应该可以解决这个问题:

main_id='".$id."'
但您不应该在sql语句中使用纯未过滤的用户输入。 我会这样做:

<?php
$id = $_GET['id'];
include("../include/connection_string.php");

if($stmt = mysqli_prepare($db, "SELECT pages, main_id FROM dhms_index_table WHERE main_id = ?")) {

    mysqli_stmt_bind_param($stmt, 'i', $id);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_store_result($stmt);

    if(mysqli_stmt_num_rows($stmt) > 0) {
        mysqli_stmt_bind_result($stmt, $pages, $main_id);
        $data = array();
        while(mysqli_stmt_fetch($stmt)) {
            $data[] = array(
                'pages' => $pages,
                'main_ID' => $main_id
            );
        }
        header('Content-type: application/json');
        echo json_encode($data);
    }
    mysqli_stmt_free_result($stmt);
    mysqli_stmt_close($stmt);
}
?>

在语句中包含用户输入时,始终确保使用准备好的语句,以避免SQL注入

请在此处阅读更多信息:


我希望能有所帮助。

您的问题很可能是由以下查询语法错误引起的:

main_id='"+$id+"'
换成这样,应该可以解决这个问题:

main_id='".$id."'
但您不应该在sql语句中使用纯未过滤的用户输入。 我会这样做:

<?php
$id = $_GET['id'];
include("../include/connection_string.php");

if($stmt = mysqli_prepare($db, "SELECT pages, main_id FROM dhms_index_table WHERE main_id = ?")) {

    mysqli_stmt_bind_param($stmt, 'i', $id);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_store_result($stmt);

    if(mysqli_stmt_num_rows($stmt) > 0) {
        mysqli_stmt_bind_result($stmt, $pages, $main_id);
        $data = array();
        while(mysqli_stmt_fetch($stmt)) {
            $data[] = array(
                'pages' => $pages,
                'main_ID' => $main_id
            );
        }
        header('Content-type: application/json');
        echo json_encode($data);
    }
    mysqli_stmt_free_result($stmt);
    mysqli_stmt_close($stmt);
}
?>

在语句中包含用户输入时,始终确保使用准备好的语句,以避免SQL注入

请在此处阅读更多信息:


我希望它能有所帮助。

添加
echo mysqli_error()在ifI猜测查询失败或连接未正确建立之前。向我们显示
connection\u string.php
同时查看您的php错误日志,并向我们显示完整的错误消息$server='localhost'$username=“root”$passwd=''$数据库='og_dhms'$db=@mysqli_connect($server、$username、$passwd)或die(“无法连接数据库”);@mysqli_select_db($db,$Dbase)或die(“无法选择数据库”)@FlashThunder的语法是
mysqli\u error($link)
。如果没有链接,它将返回自己的错误,即未指定连接!添加
echo mysqli_error()在ifI猜测查询失败或连接未正确建立之前。向我们显示
connection\u string.php
同时查看您的php错误日志,并向我们显示完整的错误消息$server='localhost'$username=“root”$passwd=''$数据库='og_dhms'$db=@mysqli_connect($server、$username、$passwd)或die(“无法连接数据库”);@mysqli_select_db($db,$Dbase)或die(“无法选择数据库”)@FlashThunder的语法是
mysqli\u error($link)
。如果没有链接,它将返回自己的错误,即未指定连接@RiggsFolly那么干杯就合适了;-)@RiggsFolly那么干杯就合适了;-)