Php 如何使用变量运行具有WHERE限制的sql查询

Php 如何使用变量运行具有WHERE限制的sql查询,php,mysql,Php,Mysql,我需要使用where和limit子句运行SQL查询 当我包含where子句时,我似乎对跑步有问题 Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in C:\xampp\htdocs\Aerosa\functions\get_posts.php on line 30 limit查询按预期运行,直到我有了where子句 <?php $status = 'publi

我需要使用where和limit子句运行SQL查询 当我包含where子句时,我似乎对跑步有问题

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in C:\xampp\htdocs\Aerosa\functions\get_posts.php on line 30
limit查询按预期运行,直到我有了where子句

    <?php


$status = 'publish';
// define how many results you want per page
$results_per_page = 2;
// find out the number of results stored in database
$sql = "SELECT * FROM at_posts ";
$result = mysqli_query($conn, $sql);
$number_of_results = mysqli_num_rows($result);
// determine number of total pages available
$number_of_pages = ceil($number_of_results/$results_per_page);
// determine which page number visitor is currently on
if (!isset($_GET['page'])) {
  $page = 1;
} else {
  $page = $_GET['page'];
}






// determine the sql LIMIT starting number for the results on the displaying page
$this_page_first_result = ($page-1)*$results_per_page;
// retrieve selected results from database and display them on page
$sql='SELECT * FROM at_posts WHERE post_status = '.$status.' LIMIT ' . $this_page_first_result . ',' .  $results_per_page;
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($result)) {
  echo $row['id'] . ' ' . $row['post_name']. '<br>';
}
echo '<nav aria-label="Page navigation">
        <ul class="pagination">';
// display the links to the pages
for ($page=1;$page<=$number_of_pages;$page++) {
  echo '<li class="page-item"><a class="page-link" href="?page=' . $page . '">' . $page . '</a></li>';
}
echo '  </ul>
      </nav>';
?>

事先谢谢。

您的查询是单引号,这意味着您的变量$status没有按预期解释,而是字符串$status被发送到SQL server,这是一个无效的查询

由于查询失败,mysqli_result返回FALSE,而不是您期望的结果

查询失败,因此mysqli_result返回FALSE而不是结果。这是因为您收到了错误消息

那么,为什么您的查询会失败呢?我认为你必须提高出版价值。它不是有效的SQL。以下内容应有效:

SELECT * FROM at_posts WHERE post_status = 'publish' LIMIT 0,2
因此,您必须编写以下内容:

$sql='SELECT * FROM at_posts WHERE post_status = \''.$status.'\' LIMIT ' . $this_page_first_result . ',' .  $results_per_page;

PS:请告知您自己有关SQL注入的信息

尝试var_dump$sql查看其中的内容var dump i get string60 SELECT*来自at_posts,post_status=publish LIMIT 0,2实际上它不是重复的,它的问题不是sql注入本身,而是他的代码没有运行。当然,他的问题可以通过阻止sql注入来解决。@j.knabenshuh如果他们使用预先准备好的语句,问题就不会出现。即使op没有问这个问题,答案也是一样的。当然,即使没有编写代码,问题也会得到解决:-根据您的陈述,结果总是只有一个问题。启发我们所有人,给出42的一个问题是什么?谢谢你,这很有效!我同意这份声明根本不安全,但我只是想在我再次把它变成一份准备好的声明之前让它发挥作用谢谢