Php 显示URL变量与数据库ID对应的每一行

Php 显示URL变量与数据库ID对应的每一行,php,mysql,sql,Php,Mysql,Sql,我有一个动态生成的URL: 我可以检索任务ID和rep fine的变量: if (isset($_GET['taskid'])) { $taskid = $_GET['taskid']; } if (isset($_GET['rep'])) { $referenceID = $_GET['rep']; } 我要做的是在页面上创建一条SQL语句,根据URL中的代表编号选择一行。例如: SELECT TASK_ID, ID, NAME FROM mytable WHERE TASK_ID = $

我有一个动态生成的URL:

我可以检索任务ID和rep fine的变量:

if (isset($_GET['taskid'])) { $taskid = $_GET['taskid']; }
if (isset($_GET['rep'])) { $referenceID = $_GET['rep']; }
我要做的是在页面上创建一条SQL语句,根据URL中的代表编号选择一行。例如:

SELECT TASK_ID, ID, NAME FROM mytable WHERE TASK_ID = $taskid AND ID = $referenceID
但是,当我回显$referenceID的结果时,它总是最后一个rep,所以在本例中是3。如何从ID=1、2和3的数据库中选择行

然后我想显示每一行,因此它将类似于:

<table>
$result = mysqli_query($con,"SELECT TASK_ID, ID, NAME FROM mytable WHERE TASK_ID = $taskid AND ID = $referenceID");
while($row = mysqli_fetch_array($result))
{
$ID = $row['ID'];
$NAME = $row['NAME'];
print "<tr><td>$ID</td><td>$NAME</td></tr>";
}
</table>

$result=mysqli_query($con,“从mytable中选择任务ID、ID、名称,其中任务ID=$taskid和ID=$referenceID”);
while($row=mysqli\u fetch\u数组($result))
{
$ID=$row['ID'];
$NAME=$row['NAME'];
打印“$ID$NAME”;
}
此查询应返回表中的3行,每行中都有ID和名称

非常感谢您的帮助。

请尝试此查询

$result = mysqli_query($con,"SELECT TASK_ID, ID, NAME FROM mytable WHERE TASK_ID = $taskid AND (ID <= $referenceID and ID>= 1)");
$result=mysqli\u query($con,“从mytable中选择任务ID、ID、名称,其中任务ID=$taskid和(ID=1)”);

您应该使用数组样式的URL参数,例如

https://mywebsite.co.uk/report.php?taskid=25&rep%5B%5D=1&rep%5B%5D=2&rep%5B%5D=3
然后,
$\u GET['rep']
将是一个数组,您可以执行以下操作:

$referenceIDs = implode(',', array_map(array($con, 'real_escape_string'), $_GET['rep']));
$sql = "SELECT TASK_ID, ID, NAME
        FROM mytable 
        WHERE TASK_ID = $taskid 
        AND ID IN ($referenceIDs)";

首先,您需要将参数名称从rep更改为rep[] 这将导致PHP$_GET['rep']返回一个数组

然后需要对数组进行内爆,以获得一个带逗号的字符串:

if (isset($_GET['rep'])) { 
    $referenceID = implode(',',$_GET['rep']); 
}
您必须将SQL语法更改为:

SELECT TASK_ID, ID, NAME FROM mytable WHERE TASK_ID = $taskid AND ID IN ($referenceID)

为什么不使用数组样式的URL参数呢?如果使用相同的索引“rep”,则每次都会重写,并且只获取最后一个值。。。不要使用此链接,建议使用POST方法。您不能对不同的值使用相同的索引,必须对每个参数使用不同的索引。如果URL中的ID不是按1到3的顺序排列,该怎么办?为什么使用静默向下投票?是因为我使用了
mysqli\u real\u escape\u string
而不是参数化查询吗?当参数个数可变时,参数很难执行。此解决方案受SQL注入的影响。如我的回答中所述,您需要转义rep。只有在使用
bind_param
时,字符串才会被清除,而不是仅在使用插值时。问题是当参数的数量可变时,
bind_param
很难使用。