PHP PDO将行的id传递给url
我需要帮助!就我的一生而言,我不知道我做错了什么。。。我试图构建一个简单的搜索脚本,从mysql数据库返回一些结果,从这些结果中,我希望能够单击每个单独的结果,并将其传递到一个新页面,比如results.php,在那里加载该结果的详细信息,我想类似于一个电子商务网站,在那里显示产品的结果,单击其中一个,该产品及其附加详细信息将加载到新页面中。我知道我需要将id传递到url,但我一直遇到的问题是,它只是将搜索结果中的最后一个id传递到url。。。但是在搜索结果中收集所有正确的id 我对php pdo等非常陌生。我曾尝试在网上找到解决方案,花了几天时间寻找,但我要么得到相同的结果,要么得到错误,这表明我做得不对。。。不管怎样,这就是我到目前为止所做的:PHP PDO将行的id传递给url,php,mysql,pdo,Php,Mysql,Pdo,我需要帮助!就我的一生而言,我不知道我做错了什么。。。我试图构建一个简单的搜索脚本,从mysql数据库返回一些结果,从这些结果中,我希望能够单击每个单独的结果,并将其传递到一个新页面,比如results.php,在那里加载该结果的详细信息,我想类似于一个电子商务网站,在那里显示产品的结果,单击其中一个,该产品及其附加详细信息将加载到新页面中。我知道我需要将id传递到url,但我一直遇到的问题是,它只是将搜索结果中的最后一个id传递到url。。。但是在搜索结果中收集所有正确的id 我对php pd
<?php
require('inc/connect/config.php');
$output = "";
if(!isset($_POST['search'])) {
$output = "";
}
if(isset($_POST['search'])) {
$search_query = $_POST['search'];
$search_query = preg_replace("#[^0-9a-z]#i", "", $search_query);
try {
$query = $db->prepare('SELECT * FROM clients WHERE name LIKE "%' . $search_query . '%" OR town LIKE "%' . $search_query . '%"');
$query->execute();
while($r = $query->fetch(PDO::FETCH_ASSOC)) {
$bname = $r['name'];
$btown = $r['town'];
$id = $r['id'];
$output .= $bname . '<br>' . $btown . '<br>' . $id . '<br><br>';
}
if($query->rowCount() < 1) {
$output = "no results found";
}
} catch (PDOException $e) {
echo "failed search";
}
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>search</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<div style="padding: 20%; text-align: center;">
<h3>search</h3>
<p>or search by <a href="categories.php">category</a></p><br>
<form method="post" action="search-test.php">
<label><3 </label><input type="text" name="search" id="search" placeholder="search by brand or town..." style="width: 40%;"><br><br>
<input type="submit" value="search">
</form>
<br>
<a href="results.php?id=<?php echo $id; ?>"><?php echo $output; ?></a>
</div>
</body>
</html>
$id在每次传递到while循环时都会被重写。所以,它的最终结果是你的最后一个id,这是真的
您的第一个选择是将SQL结果存储到数组中,然后在视图中对其进行循环。您的第二个选择是:
替换:
$output .= $bname . '<br>' . $btown . '<br>' . $id . '<br><br>';
$output.=$bname'
“$B镇。”
“$身份证。”
';
作者:
$output.=“
”;
以及:
作者:
$id在每次传递到while循环时都会被重写。因此,它的最终结果是您的最后一个id,这是真的
您的第一个选择是将SQL结果存储到数组中,然后在视图中对其进行循环。第二个选择是:
替换:
$output .= $bname . '<br>' . $btown . '<br>' . $id . '<br><br>';
$output.=$bname.
'.$btown.
'.$id.
';
作者:
$output.=“
”;
以及:
作者:
$id在每次传递到while循环时都会被重写。所以,它的最终结果是你的最后一个id,这是真的
您的第一个选择是将SQL结果存储到数组中,然后在视图中对其进行循环。您的第二个选择是:
替换:
$output .= $bname . '<br>' . $btown . '<br>' . $id . '<br><br>';
$output.=$bname'
“$B镇。”
“$身份证。”
';
作者:
$output.=“
”;
以及:
作者:
$id在每次传递到while循环时都会被重写。因此,它的最终结果是您的最后一个id,这是真的
您的第一个选择是将SQL结果存储到数组中,然后在视图中对其进行循环。第二个选择是:
替换:
$output .= $bname . '<br>' . $btown . '<br>' . $id . '<br><br>';
$output.=$bname.
'.$btown.
'.$id.
';
作者:
$output.=“
”;
以及:
作者:
到结果页的链接是到结果页的链接是到结果页的链接是到结果页的链接是首先,我建议重构当前代码的一些部分,即您准备语句的方式。不要将参数直接包含在prepare语句中,而应该将它们抽象到params
方法中;不这样做会破坏准备语句的目的,并使您容易接受SQL注入
$query = $db->prepare('SELECT * FROM clients WHERE name LIKE :query OR town LIKE :query');
$params = array(':query' => '%' . $search_query . '%');
$query->execute($params);
其次,PHP PDO有一个fetchAll
方法,您可以通过该方法进行迭代,而不是多次调用fetch
$results = $query->fetchAll(PDO::FETCH_ASSOC);
if(count($results) < 1) {
$output = "no results found";
}
else {
for($results as $r) {
$bname = $r['name'];
$btown = $r['town'];
$id = $r['id'];
$output .= $bname . '<br>' . $btown . '<br>' . $id . '<br><br>';
}
}
然后通过
祝你好运 首先,我建议重构当前代码的一些部分,即如何准备语句。不要将参数直接包含在prepare语句中,而应该将它们抽象到params
方法中;不这样做会破坏准备语句的目的,并使您容易接受SQL注入
$query = $db->prepare('SELECT * FROM clients WHERE name LIKE :query OR town LIKE :query');
$params = array(':query' => '%' . $search_query . '%');
$query->execute($params);
其次,PHP PDO有一个fetchAll
方法,您可以通过该方法进行迭代,而不是多次调用fetch
$results = $query->fetchAll(PDO::FETCH_ASSOC);
if(count($results) < 1) {
$output = "no results found";
}
else {
for($results as $r) {
$bname = $r['name'];
$btown = $r['town'];
$id = $r['id'];
$output .= $bname . '<br>' . $btown . '<br>' . $id . '<br><br>';
}
}
然后通过
祝你好运 首先,我建议重构当前代码的一些部分,即如何准备语句。不要将参数直接包含在prepare语句中,而应该将它们抽象到params
方法中;不这样做会破坏准备语句的目的,并使您容易接受SQL注入
$query = $db->prepare('SELECT * FROM clients WHERE name LIKE :query OR town LIKE :query');
$params = array(':query' => '%' . $search_query . '%');
$query->execute($params);
其次,PHP PDO有一个fetchAll
方法,您可以通过该方法进行迭代,而不是多次调用fetch
$results = $query->fetchAll(PDO::FETCH_ASSOC);
if(count($results) < 1) {
$output = "no results found";
}
else {
for($results as $r) {
$bname = $r['name'];
$btown = $r['town'];
$id = $r['id'];
$output .= $bname . '<br>' . $btown . '<br>' . $id . '<br><br>';
}
}
然后通过
祝你好运 首先,我建议重构当前代码的一些部分,即如何准备语句。不要将参数直接包含在prepare语句中,而应该将它们抽象到params
方法中;不这样做会破坏准备语句的目的,并使您容易接受SQL注入
$query = $db->prepare('SELECT * FROM clients WHERE name LIKE :query OR town LIKE :query');
$params = array(':query' => '%' . $search_query . '%');
$query->execute($params);
其次,PHP PDO有一个fetchAll
方法,您可以通过该方法进行迭代,而不是多次调用fetch
$results = $query->fetchAll(PDO::FETCH_ASSOC);
if(count($results) < 1) {
$output = "no results found";
}
else {
for($results as $r) {
$bname = $r['name'];
$btown = $r['town'];
$id = $r['id'];
$output .= $bname . '<br>' . $btown . '<br>' . $id . '<br><br>';
}
}
然后通过
祝你好运 朱利安,你太棒了。。。我知道我需要做一些事情来防止SQL注入,但我还没有研究过,所以谢谢@凯莉·史密斯不用担心,熟能生巧!坚持下去!朱利安,你太棒了。。。我知道我需要做一些事情来防止SQL注入,但我还没有研究过,所以谢谢@凯莉·史密斯不用担心,熟能生巧!坚持下去!朱利安,你太棒了。。。我知道我需要做一些事情来防止SQL注入,但我还没有研究过,所以谢谢@凯莉·史密斯不用担心,熟能生巧!坚持下去!朱利安,你太棒了。。。我知道我需要做点什么