将带有另一个搜索查询的变量添加到MySQL SELECT语句中

时间:2014-11-10 19:00:58

标签: php mysql

@OhGodWhy:再次感谢您的帮助。我现在正在向您展示我的代码的样子,也许您知道可能出现的问题:

在这里,在第一部分中,我用你的答案的第一个块(两行)替换了我的<a href>部分。请参阅以下代码:

//-query the database table
$sql="SELECT * FROM Hashtags";

//-run the query against the mysql query function
$result=mysql_query($sql);

//-create while loop and loop through result set 
while($row=mysql_fetch_array($result)){

//-display the result of the array
$query_string = 'hashtag=true&tag='.urlencode($row['Hashtag']);
echo '<a href="index.php?'.htmlentities($query_string).'" title="Suche nach '.$row['Hashtag'].'">#'.$row['Hashtag'].'</a>';

然后,我在我的hashtags函数开始后立即添加了你的答案的第二个块。我将if语句包装在整个函数中,直到while-part结束。见下文:

function hashtags() {

$tag = isset($_GET['tag'])? urldecode($_GET['tag']) : false ;
if($tag) {

$mysqli = new mysqli('host', 'user', 'pass', 'db');
$stmt = $mysqli->prepare("select * from table where name like CONCAT('%', ?, '%')");
$stmt->bind_param('s', $tag);
$stmt->execute();

//-run the query against the mysql query function
$result=mysql_query($sql);

//-create while loop and loop through result set 
while($row=mysql_fetch_array($result)){

//-display the result of the array
echo '...'
//end of while & if

while循环是否也必须调整为mysqli? 也许这些信息可以提供帮助:在我的浏览器中,URL看起来正确:&#34; index.php?hashtag = true&amp; tag = ...&#34;

当我点击<a href>时,我得到一个空屏幕。

再次感谢您的帮助,抱歉打扰您!

1 个答案:

答案 0 :(得分:2)

您应该只将哈希标记提供为包含$row['hashtag']

值的urlencoded字符串
$query_string = 'hashtag=true&tag='.urlencocde($row['hashtag']);
echo '<a href="index.php?'.htmlentities($query_string).'" title="Suche nach '.$row['Hashtag'].'">#'.$row['Hashtag'].'</a>';

然后在你的函数hashtags中,你可以像这样获取标记值:

$tag = isset($_GET['tag'])? urldecode($_GET['tag']) : false ;
if($tag):

此外,您需要move away from mysql并确保自己免受SQL注入。我们可以通过迁移到mysqli库并使用prepared语句来完成所有这些操作。

$mysqli = new mysqli('host', 'user', 'pass', 'db');
$stmt = $mysqli->prepare("select * from table where name like CONCAT('%', ?, '%')");
$stmt->bind_param('s', $tag);
$stmt->execute();

while($row = $stmt->fetch_assoc()){
    //echo stuff
}

您需要concat LIKE,否则您将收到错误。

<强>资源

  1. Ternary Operators
  2. MySQLI prepared statements
  3. MySQLI bind param
  4. urlencode
  5. urldecode
  6. htmlentities