请检查MySQL查询

时间:2016-04-17 11:56:12

标签: php sql

我正在尝试使用MySQLi Query获取数据。 请检查我的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);
    }
    ?>

connections_string.php

$server = 'localhost'; 
$username ="root"; 
$passwd =''; 
$Dbase = 'og_dhms'; 
$db = @mysqli_connect($server,$username,$passwd) 
        or die("Could not connect database"); 
@mysqli_select_db($db, $Dbase) 
        or die("Could not select database");

2 个答案:

答案 0 :(得分:5)

这一行

main_id='"+$id+"'

正在使用+符号而不是点来连接。这是JS / C方法。也许你是来自那种类型的背景,并认为你可以在PHP中使用它; 你不能

所以...

main_id='".$id."'

同时确保您拥有$id = $_GET['id'];的值。

错误报告会告诉您是否。

如果GET数组是一个整数(我相信它确实存在),那么你最好使用(int)

$id = (int)$_GET['id'];

并检查它是否已设置/不为空。

即:

if(isset($_GET['id'])){

    $id = (int)$_GET['id'];

}

if(!empty($_GET['id'])){

    $id = (int)$_GET['id'];

}

答案 1 :(得分:0)

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

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注入时,请始终确保使用预准备语句。

在此处详细了解:http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

我希望它有所帮助。