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);