Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 极限问题_Php_Mysql - Fatal编程技术网

Php 极限问题

Php 极限问题,php,mysql,Php,Mysql,我正在对搜索结果使用分页,但由于某些原因,我的分页无法正确使用搜索脚本。我似乎找不到将LIMIT$start$display放在搜索查询代码中的正确位置,无论我将其放在代码中的哪个位置,它都会显示错误的分页。谁能帮帮我吗 这是我的PHP&MySQL搜索代码的一部分 $mysqli = mysqli_connect("localhost", "root", "", "sitename"); mysqli_select_db($mysqli, "sitename"); $search_ex

我正在对搜索结果使用分页,但由于某些原因,我的分页无法正确使用搜索脚本。我似乎找不到将
LIMIT$start$display
放在搜索查询代码中的正确位置,无论我将其放在代码中的哪个位置,它都会显示错误的分页。谁能帮帮我吗

这是我的PHP&MySQL搜索代码的一部分

$mysqli = mysqli_connect("localhost", "root", "", "sitename");
mysqli_select_db($mysqli, "sitename");

    $search_explode = explode(" ", $search);

    foreach($search_explode as $search_each) {
        $x++;
        if($x == 1){
            $construct .= "article_content LIKE '%$search_each%' OR title LIKE '%$search_each%' OR summary LIKE '%$search_each%'";
        } else {
            $construct .= "OR article_content LIKE '%$search_each%' OR title LIKE '%$search_each%' OR summary LIKE '%$search_each%'";
        }

    }

$construct = "SELECT users.*, users_articles.* FROM users_articles
              INNER JOIN users ON users_articles.user_id = users.user_id
              WHERE $construct";
$run =  mysqli_query($mysqli, $construct);

$foundnum = mysqli_num_rows($run);
SQL语句

SELECT users.*, users_articles.* FROM users_articles INNER JOIN users ON users_articles.user_id = users.user_id WHERE article_content LIKE '%find%' OR title LIKE '%find%' OR summary LIKE '%find%'OR article_content LIKE '%this%' OR title LIKE '%this%' OR summary LIKE '%this%'OR article_content LIKE '%article%' OR title LIKE '%article%' OR summary LIKE '%article%' LIMIT 0, 10

SELECT的基本语法是:

SELECT [fields]
FROM [tables [JOIN tables]]
WHERE [conditions]
GROUP BY [fields]
HAVING [conditions]
ORDER BY [fields]
LIMIT [limit]
所以,就在WHERE条件结束后


以下是显示的文档。

这应该显示前10行:

SELECT      users.*, users_articles.* FROM users_articles
INNER JOIN  users ON users_articles.user_id = users.user_id
WHERE       article_content LIKE '%something%'
LIMIT       0, 10
LIMIT
子句更改为以下内容应显示从11到20的行:

LIMIT       10, 10
还请注意,您可能应该按照上面注释中的建议转义
$construct
字符串。这是为了避免


此外,您可能希望改为使用进行调查。

您是否记得在生成查询时在字符串片段中插入空格?请记住,PHP不会将您自己没有放入的任何内容放入字符串中

$x = 'a';
$x .= 'b';
为您提供
ab
,而不是
a[space]b
。如果输入了多个搜索词,您的
$construct
将充满语法错误,因为后续的
将直接附加到先前添加的任何搜索词的末尾。你最终会得到这样的结果:

[...snip...] OR summary LIKE '%$search_each%OR article_content LIKE[...snip...]
                                           ^^--syntax error here.

如果追加limit子句而不确保在查询结束和追加的“limit X,Y”文本之间有空格,则同样适用。

但我的代码中的确切位置是什么?我什么都试过了,但都没有成功:(我不相信你真的试过。他在WHERE条件之后说,这很简单,可以解释,“WHERE$conditions LIMIT…”我做了,它显示我的分页都是错误的。例如,如果我有40条记录,它将只显示一条而不显示其余的。@lone:这看起来像是
WHERE
子句中的错误。@Daniel Vassallo有什么线索吗?要添加
$search\u each=mysqli\u real\u escape\u字符串($mysqli,$search\u each);
很好。或者使用prepared语句。我想补充一点,LIMIT子句参数应该显式地强制转换/求值为int,以防止注入
$mysqli = mysqli_connect("localhost", "root", "", "sitename");
mysqli_select_db($mysqli, "sitename");

    $search_explode = explode(" ", $search);

    foreach($search_explode as $search_each) {
        $x++;
        if($x == 1){
            $construct .= " article_content LIKE '%$search_each%' OR title LIKE '%$search_each%' OR summary LIKE '%$search_each%'";
        } else {
            $construct .= " OR article_content LIKE '%$search_each%' OR title LIKE '%$search_each%' OR summary LIKE '%$search_each%'";
        }

    }

$construct = "SELECT users.*, users_articles.* FROM users_articles
              INNER JOIN users ON users_articles.user_id = users.user_id
              WHERE $construct";
$construct .= " LIMIT 0, 10" ; // replace 0, 10 with your variables

$run =  mysqli_query($mysqli, $construct);

$foundnum = mysqli_num_rows($run);