Php MySQL受URL限制
我写了以下内容,以限制我的URL中的表输出?limit=10,但是它给了我:Php MySQL受URL限制,php,mysql,Php,Mysql,我写了以下内容,以限制我的URL中的表输出?limit=10,但是它给了我: ( ! ) SCREAM: Error suppression ignored for ( ! ) Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\sql_table.php on line 44 Call Stack # Time Memory Funct
( ! ) SCREAM: Error suppression ignored for
( ! ) Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\sql_table.php on line 44
Call Stack
# Time Memory Function Location
1 0.0005 250584 {main}( ) ..\sql_table.php:0
2 0.0020 258904 mysql_fetch_array ( ) ..\sql_table.php:44
我的代码如下:
if ($_GET['limit']) {
$limitsql = ' limit 0, ' . $_GET['limit'];
} else
$limitsql = '';
// This chooses which results i want to select from
$result = mysql_query("SELECT * FROM test1 WHERE 1" . '$limitsql');
您可能正在使用以下内容:
while($row = mysql_fetch_array()) {
}
但是,您应该使用:
while($row = mysql_fetch_array($result)) {
}
您没有提供此处使用的代码,因此我只是猜测。更改此项:
$result = mysql_query("SELECT * FROM test1 WHERE 1" . '$limitsql');
为此:
$result = mysql_query("SELECT * FROM test1 WHERE 1" . $limitsql);
另外,您确实不应该将$\u GET
的输入直接放入SQL 试试这个
if($_GET['limit'])
{
$limitsql = $_GET['limit'];
$result = mysql_query("SELECT * FROM table_name LIMIT 0, $limitsql");
}
这里的主要问题是,您不需要将
$limitsql
置于引号中,因此将其更改为
$result = mysql_query("SELECT * FROM (Table Name) WHERE 1" . $limitsql);
但是,这段代码还需要注意一些其他事项。首先,如注释中所述,mysql_*函数已被弃用,理想情况下,您应该改为另一个库,如mysqli或PDO
此外,此代码非常容易受到sql注入攻击,在将输入放入sql查询之前,应该对其进行清理
此外,您没有检查调用mysql\u query
的输出。您看到的错误是因为当查询失败时,函数返回false
。使用以下方法:
if($_GET['limit']){
if (is_numeric($_GET['limit'])) {
$limitsql = ' limit 0, ' . $_GET['limit'];
}
}else{
$limitsql = '';
}
$result = mysql_query("SELECT * FROM test1 WHERE 1" . $limitsql);
这是什么?(表名)使用您的实际表名进行更改,并请停止使用不推荐使用的函数,如
mysql.*
,了解pdo或mysqli。您的代码也容易受到mysql注入的攻击打印您在mysql\u查询中运行的最终SQL。您的解决方案可以提供一些sql注入,因此请注意此处不需要1的地方(这不是错误)。一旦代码正常工作,我将对sql注入进行排序,因为我将在需要的地方使用sql escape命令。@user2452069,你有一个有趣的雇主:DWHERE 1在这里不需要:)这非常有效,谢谢你在你的答案中添加一个intval,这样他就不会因为$limitsql='limit 0',而担心sql注入了;在第二行