Php 显示URL变量与数据库ID对应的每一行
我有一个动态生成的URL: 我可以检索任务ID和rep fine的变量: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 = $
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
很难使用。