-3

数据库连接都是正确的,但我收到一条错误消息

Warning: 
mysql_fetch_array(): supplied argument is not a valid MySQL result on line 31

<?php 
  $hostname = "localhost";  
  $username = "user";  
  $password = "pass";   
  $usertable = "products";  
  $dbName = "test_prods";  


 $s = $_GET["s"];  
 $name = $row["product_name"];  

     MYSQL_CONNECT($hostname, $username, $password) OR DIE("Unable to connect to database");   
     @mysql_select_db( "$dbName") or die( "Unable to select database");   

 //error message (not found message)   
   $XX = "No Products Found";   


 $query = mysql_query("SELECT * FROM $usertable WHERE $s LIKE '$name'");   
  while ($row = mysql_fetch_array($query))   
    {  
      $variable1=$row["row_name1"];  
      $variable2=$row["row_name2"];  
      $variable3=$row["row_name3"];  
print ("this is for $variable1, and this print the $variable2 end so on...");  
}  

 //below this is the function for no record!!   
if (!$variable1)  
   {  
       print ("$XX");  
   }  
//end  
?>
4

3 回答 3

2

改变:

$s = $_GET["s"];  
$name = $row["product_name"];  

至:

$s = mysql_real_escape_string($_GET["s"]);
$name = mysql_real_escape_string($row["product_name"]);

请注意此警告: *此扩展自 PHP 5.5.0 起已弃用,并将在未来删除。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。*

资料: http: //php.net/manual/en/function.mysql-real-escape-string.php


并将您的查询更改为:

$query = mysql_query("SELECT * FROM $usertable WHERE $s LIKE '$name'") 
      or die(mysql_error());

会告诉您 SQL 中是否存在可以缩小问题范围的错误!如果你能告诉我你得到什么结果,我可以更新更适合这个问题的答案。

于 2013-01-02T00:38:22.013 回答
1

您似乎正在使用未定义的变量:

$name = $row["product_name"];

我猜您正在尝试从另一个查询中获取名称,然后使用它来获取您的匹配项(如果有)。

在打电话之前设置名称mysql_query很可能会为您完成这项工作。

另外,从外观上看,您只是从 mysql 开始,所以我建议您放弃学习使用 mysql_ 函数,并开始学习如何使用 PDO 运行查询。

我发现本教程很有帮助。

于 2013-01-02T00:36:30.907 回答
1

您的 sql 语法可能有错误。

在这条线上

$name = $row["product_name"];  

$row["product_name"] 会评估任何东西吗?

从您发布的内容来看,它没有,但也许在其他地方加载了一个值。

如果它没有评估任何东西,那么 sql 语句将有语法错误并且 $query 不能成为 mysql 资源。

于 2013-01-02T00:37:22.073 回答