【问题标题】:What is wrong with my MySQL Database Search Code? [closed]我的 MySQL 数据库搜索代码有什么问题? [关闭]
【发布时间】:2013-01-02 00:31:01
【问题描述】:

数据库连接是正确的,但我收到一个错误提示

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  
?>

【问题讨论】:

  • 您可以在调用mysql_query 后查看mysql_error 以查看运行查询是否有任何问题。
  • $name = $row["product_name"]; --- 请解释这一行
  • 请注意旧的 mysql_% 功能将被停用。这意味着当 PHP 升级时,您的代码可能会停止工作。对于新项目,您应该切换到 mysqli 扩展为recommended in the PHP docs
  • @Arnold Daniels:建议在 mysqli/pdo 之间进行选择,而不是直接“切换到 mysqli”
  • @zerkms,你是对的! PDO 的 API 与旧的 mysql 有很大的不同。所以如果有人已经熟悉了,我通常建议切换到 mysqli 而不是 PDO。

标签: mysql database search


【解决方案1】:

变化:

$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 中有错误,会告诉您可以缩小问题的范围!如果你能告诉我你得到了什么结果,我可以更新更适合这个问题的答案。

【讨论】:

    【解决方案2】:

    你的 sql 语法可能有错误。

    在这一行

    $name = $row["product_name"];  
    

    $row["product_name"] 会评估什么吗?

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

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

    【讨论】:

      【解决方案3】:

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

      $name = $row["product_name"];
      

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

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

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

      我发现this tutorial 很有帮助。

      【讨论】:

      • 感谢 @ppp 我认为 2013 年提出这个问题的我非常感谢有关 PDO 的提醒,如果没有,今天我很感激你的回答!
      猜你喜欢
      • 1970-01-01
      • 2018-01-08
      • 2013-02-11
      • 1970-01-01
      • 2023-04-01
      • 2014-08-12
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多