【问题标题】:search.php page bringing back errorssearch.php 页面返回错误
【发布时间】:2013-07-31 11:26:21
【问题描述】:

我正在为我的网站创建一个搜索页面,你可以SEE HERE

我从this tutorial得到的

当在搜索框中输入任何内容并点击搜索时,我会收到一些错误提示:

**警告:mysql_real_escape_string() [function.mysql-real-escape-string]:第 46 行 article.php 中用户 'root'@'localhost' 的访问被拒绝(使用密码:NO)

警告:mysql_real_escape_string() [function.mysql-real-escape-string]:无法在第 46 行的 article.php 中建立到服务器的链接

警告:mysql_query() [function.mysql-query]:第 61 行 article.php 中用户 'root'@'localhost' 的访问被拒绝(使用密码:NO)

警告:mysql_query() [function.mysql-query]:无法在第 61 行的 article.php 中建立到服务器的链接

警告:mysql_fetch_assoc() 期望参数 1 是资源,在 article.php 第 64 行给出的布尔值

谁能看出来是什么意思?

我的 search.php 代码是这样的:

<?php

include_once('include/connection.php');
include_once('include/article.php');


$article = new storearticle();

$articles = $article->fetch_all();

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />

<title>Search Xclo</title>
<link rel="stylesheet" href="other.css" />
</head>

<body>

<div>
 <h1>Search</h1>
<form action="" method="GET">
<p>

<input type="text" name="term" />
<input type="submit" value="search" />
</p>
</form>
</div>

<div>
    <?PHP

 if (empty($_GET['term']) === false){
   $search_results = search_posts($_GET['term']);

if (empty($search_results)){
    echo 'Your Search Returned No Results.';
    }

   foreach ($search_results as $result){
      echo "<h3>($result['title'])</h3>";
      echo "<p>($result['body'])</p>";    
      }

}
?>
</div>
</body>

</html>

我的article.php是这样的:

    <?php

class storearticle {
public function fetch_all(){
    global $pdo;
      $query = $pdo->prepare("SELECT * FROM mobi");
      $query->execute();
return $query->fetchAll();
              }

public function fetch_data($promo_title) {
   global $pdo;

 $query = $pdo->prepare("SELECT * FROM mobi WHERE promo_title = ?");
  $query->bindValue(1, $promo_title);
   $query->execute();

return $query->fetch(); 

}

}

class category {
public function fetch_all(){
    global $pdo;
      $query = $pdo->prepare("SELECT DISTINCT `promo_cat` FROM mobi");
      $query->execute();
return $query->fetchAll();
              }

public function fetch_data($promo_cat) {
   global $pdo;

 $query = $pdo->prepare("SELECT DISTINCT * FROM mobi WHERE `something`  = 'something'");
  $query->bindValue(1, $promo_cat);
   $query->execute();

return $query->fetch(); 

}

}

function search_posts($term){
    $keywords = preg_split('#\s+#',mysql_real_escape_string($term));

$title_where   = "'promo_title' LIKE '%" . implode("%' OR 'promo_title' LIKE '%", $keywords) . "%'";
$content_where   = "'promo_content' LIKE '%" . implode("%' OR 'promo_content' LIKE '%", $keywords) . "%'";
$name_where   = "'promo_name' LIKE '%" . implode("%' OR 'promo_name' LIKE '%", $keywords) . "%'";

 $sql = "SELECT 
              'promo_title' AS 'title',
              LEFT('promo_content', 100) AS 'body',
              'promo_name' AS 'name'
              FROM 'mobi'
              WHERE {$title_where}
              OR {$content_where}
              OR {$name_where}";

    $result = mysql_query($sql);

    $results = array();
    while (($row = mysql_fetch_Assoc($result)) !== false){
        $results[] = $row;

     return $results;
}
}



?>

我的 connection.php 代码是这样的:

<?php

try {
$pdo = new PDO('mysql:host=localhost;dbname=xclo', 'xclo', 'xclo');
}catch (PDOException $e){
  exit('Database Error.');
}

?>

我可以在此页面中添加什么以使其正常工作?

谢谢。

【问题讨论】:

  • 能否显示echo $sql;的输出
  • 请编辑您的问题并在此处包含错误消息。 SO 的工作原理是记录如何解决问题,如果错误已修复,没有人可以看到问题是什么,那么这个问题对 SO 用户没有任何好处
  • 请回显 $sql 查询以了解问题出在哪里或将其粘贴到此处
  • Yogesh Suthar 这不相关。

标签: php mysql search


【解决方案1】:

在使用 mysql_real_escape_string 之前,您必须与 MySql 服务器建立一个连接。

请参阅:http://php.net/manual/de/book.mysql.phphttp://php.net/manual/de/book.pdo.php

编辑:试试这个(未测试):

function search_posts($term)
{
  global $pdo;

  $keywords = preg_split('#\s+#', $term);

  $title_where = "'promo_title' LIKE '%" . implode("%' OR 'promo_title' LIKE '%", $keywords) . "%'";
  $content_where = "'promo_content' LIKE '%" . implode("%' OR 'promo_content' LIKE '%", $keywords) . "%'";
  $name_where = "'promo_name' LIKE '%" . implode("%' OR 'promo_name' LIKE '%", $keywords) . "%'";

  $sql = "SELECT
          'promo_title' AS 'title',
          LEFT('promo_content', 100) AS 'body',
          'promo_name' AS 'name'
          FROM 'mobi'
          WHERE {$title_where}
          OR {$content_where}
          OR {$name_where}";

  return $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
}

编辑:哦,抱歉,试试这个 ;-)

function search_posts($term)
{
  global $pdo;

  $keywords = preg_split('#\s+#', $term);

  $title_where = "`promo_title` LIKE '%" . implode("%' OR `promo_title` LIKE '%", $keywords) . "%'";
  $content_where = "`promo_content` LIKE '%" . implode("%' OR `promo_content` LIKE '%", $keywords) . "%'";
  $name_where = "`promo_name` LIKE '%" . implode("%' OR `promo_name` LIKE '%", $keywords) . "%'";

  $sql = "SELECT
          `promo_title` AS 'title',
          LEFT(`promo_content`, 100) AS 'body',
          `promo_name` AS 'name'
          FROM `mobi`
          WHERE {$title_where}
          OR {$content_where}
          OR {$name_where}";

  return $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
}

【讨论】:

  • 我已经建立了联系。它存储在“include_once('include/connection.php');”中问题是为什么它不起作用?
  • 我的连接页面适用于我网站的其他部分。现在怎么突然不对了?如果我发布连接代码会有帮助吗?
  • 但是你没有在 search_posts() 中使用 PDO。
  • 那么我要添加什么到 search_posts() 以连接到 PDO?
  • 谢谢。我将编辑我的文章页面以反映其当前显示,但我现在只收到 1 个错误。这是致命错误:在第 64 行的 article.php 中调用非对象的成员函数 fetchAll()
【解决方案2】:

替换:

echo "<h3>($result['title'])</h3>";
echo "<p>($result['body'])</p>";

与:

echo "<h3>{$result['title']}</h3>";
echo "<p>{$result['body']}</p>";

【讨论】:

  • 这修复了解析错误。接下来,您需要修复您的 search_posts 功能。列名和表名必须用 ` 转义,而不是 '。
【解决方案3】:

试试

echo "<h3>{$result['title']}</h3>";
echo "<p>{$result['body'])}</p>";

或者试试

echo "<h3>".$result['title']."</h3>";
echo "<p>".$result['body']."</p>";

代替

echo "<h3>($result['title'])</h3>";
echo "<p>($result['body'])</p>";

编辑

现在对于您更新的问题,正如错误所暗示的那样,您没有连接到 mysql 数据库以执行相关操作。

您可以尝试将链接标识符传递给 mysql_real_escape_string 函数,例如

$keywords = preg_split('#\s+#',mysql_real_escape_string($term, $con));

$con 定义了你的 mysql 连接。

【讨论】:

    【解决方案4】:

    问题出在

    echo "<h3>($result['title'])</h3>";
    

    问题是 php 不会正确解析这个,除非变量与 echo 连接起来

    echo "<h3>(".$result['title'].")</h3>";
    

    或用 {} 封装

    echo "<h3>({$result['title']})</h3>";
    

    【讨论】:

    • 您没有在您的 article.php 页面中包含 connection.php
    • 嗨,安杰尔。由于文章只是一个功能页面,没有人会登陆它,所以没关系。搜索页面确实调用了连接和文章。所以连接被读取两次是没有意义的。这可能会导致更多问题。
    猜你喜欢
    • 2019-03-24
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 2013-02-19
    相关资源
    最近更新 更多