【问题标题】:MySQL Query Problems with PHP in search form搜索表单中 PHP 的 MySQL 查询问题
【发布时间】:2015-01-28 19:39:46
【问题描述】:

我已经编写了一个基本的 PHP 站点,它将参数从一个页面传递到另一个页面并查询 mysql 数据库。

我已经检查过参数已经通过了,但是查询中的 where 参数似乎不起作用。有人可以帮忙吗?

该网站是 www.retroseek.co.uk,搜索框位于底部。非常感谢。

<!DOCTYPE html>

<html>

<head>

<title>Retro Computing Resource - RetroSeek Search</title>

<meta charset="UTF-8">


<style>
table, td, th {
    border: 1px solid green;
}

th {
    background-color: green;
    color: white;
}
</style>


</head>

<body>

<h1>Results from the RetroSeek Search Engine</h1>

<?php 

echo "<h1>Testing the GET has worked " . $_GET["query"] . "</h1>";


require( '../connect_db.php' ) ;

$query = $_GET['query']; 


$query = htmlspecialchars($query); 


$query = mysql_real_escape_string($query);

echo "<h1>Testing the GET has worked " . $_GET["query"] . "</h1>";



    $min_length = 4;
    // you can set minimum length of the query if you want


$q = "SELECT fgames.fgname, fgames.fgprorg, fgames.fgprbud, fgames.fgratng, fgames.fgprdsk, ftypes.fttname, frefs.fryymm, frefs.frpage, frefs.frissue, fmagzne.fmname, frefcde.ffname
FROM fgames, ftypes,frefs, fmagzne,frefcde
WHERE ftypes.fttype = fgames.fgtype
and   fgames.fglink = frefs.frlink2
and   frefs.frentry = frefcde.ffentry
and   frefs.frmag = fmagzne.fmmag 
and   fgames.fgname LIKE '%".$query."%'" ;



$r = mysqli_query( $dbc , $q ) ;

if( $r ) 
{


  echo '<table><tr><th>FGNAME</th><th>FGPRORG</th><th>FGRBUD</th><th>FGRATNG</th><th>FGRDSK</th><th>FTTTNAME</th><th>FRYYMM</th><th>FRPAGE</th><th>FRISSUE</th><th>FMNAME</th><th>FFNAME</th></tr>';

  while ( $row = mysqli_fetch_array( $r , MYSQLI_ASSOC ) ) 
  {
    echo '<tr><td>'.$row['fgname'].'</td><td>'.$row['fgprorg'].'</td><td> '.$row['fgprbud'].' </td><td>'.$row['fgratng'].' </td><td>'.$row['fgprdsk'].' </td><td>'.$row['fttname'].'</td><td> '.$row['fryymm'].'</td><td> '.$row['frpage'].'</td><td> '.$row['frissue'].' </td><td>'.$row['fmname'].' </td><td>'.$row['ffname'].'</td></tr>';
  }
  echo '</table>';
}

else
{
  echo '<p>' . mysqli_error( $dbc ) . '</p>'  ;
}

show_records($dbc);

# Close the connection.
mysqli_close( $dbc ) ;
?>



<h3>Contact me at jonesypeter@hotmail.com if you would like any information on my plans for this website. Please send me as much feedback and suggestions as possible.</h3>
<h4>Last updated on 28 January 2015</h4>

</body>
</html>

【问题讨论】:

  • 您可以回显 $q 并将其粘贴到您的问题中吗?与 $_GET["query"] 一样吗?
  • 您正在混合使用 mysql_*mysqli_* 函数。那是行不通的。
  • 不要应用多层转义。转义数据仅用于您应用它的用途。具体来说,删除此$query = htmlspecialchars($query); 。在向浏览器输出数据时应用它。
  • 如果在 LIKE 中将 '%".$query."%' 替换为硬编码值,查询是否有效?

标签: php mysql get


【解决方案1】:

如果参数中有特殊字符或空格,有时使用 $_GET 可能会有点困难。

我看到你处理了 $_GET['query'] 但如果你有空格,你可以得到不同的结果。

请回显 $q 并尝试在 phpMyAdmin 或 mysql 终端中运行结果。 如果它有效并返回您想要的数据,请将其放在代码的最顶部:

<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

并报告错误。

对了,mysqli_error()里面没有错误?

【讨论】:

  • 嗨,感谢所有的反馈和对我的温柔对待,我添加了错误报告,它给出:警告:mysql_real_escape_string() [function.mysql-real-escape-string]:访问被拒绝第 48 行 /home/sites/retroresource.co.uk/public_html/retroseek.php 中的用户 'retroresource.co.uk'@'10.0.1.170'(使用密码:否)警告:mysql_real_escape_string() [function.mysql- real-escape-string]:无法在第 48 行的 /home/sites/retroresource.co.uk/public_html/retroseek.php 中建立到服务器的链接
  • 您好,我已经回显了查询,它似乎不包含参数:retroresource.co.uk/retroseek.php?query=Dizzy
  • 现在似乎工作正常,不确定我做了什么,但如果您想查看代码,请告诉我。谢谢大家
  • 让我看看。它会给你一个错误: $query = mysql_real_escape_string($query);因为您使用的是 mysqli,而不是 mysql,就像 Jay Blanchard 所说的那样。您需要将其更改为 mysqli。看起来你成功了。它现在工作了吗?好的。 :) 再见!
【解决方案2】:

仅供参考,我个人觉得这更容易阅读:

"
SELECT g.fgname
     , g.fgprorg
     , g.fgprbud
     , g.fgratng
     , g.fgprdsk
     , t.fttname
     , r.fryymm
     , r.frpage
     , r.frissue
     , m.fmname
     , frefcde.ffname
  FROM fgames g
  JOIN ftypes t
    ON t.fttype = g.fgtype
  JOIN frefs r
    ON r.frlink2 = g.fglink 
  JOIN fmagzne m
    ON m.fmmag = r.frmag 
  JOIN frefcde
    ON frefcde.ffentry = r.frentry 
 WHERE g.fgname LIKE '$query';
";

【讨论】:

    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 2018-04-19
    • 2012-11-12
    • 2011-11-05
    • 1970-01-01
    相关资源
    最近更新 更多