mysql_fetch_array()问题

时间:2011-05-13 10:40:33

标签: php mysql

以下是抛出以下错误:

  

警告:mysql_fetch_array():提供   参数不是有效的MySQL结果   资源   /home/zyquo/public_html/ghosthuntersportal.com/product_process.php   在第33行

Line 33 is: while($row11=mysql_fetch_array($result11)){

elseif($_GET['do']=="add"){
$sql10="INSERT INTO $tbl_name (product_name, product_price, product_category, product_link, product_image, product_tag, product_features, product_pros, product_cons, product_description, product_notes) VALUES ('$product_name', '$product_price', '$product_category', '$product_link', '$product_image', '$product_tag', '$product_features', '$product_pros', '$product_cons', '$product_description', '$product_notes')";
mysql_query($sql10);
$sql11="SELECT product_id FROM $tbl_name WHERE product_name=".$product_name."";
$result11=mysql_query($sql11);
while($row11=mysql_fetch_array($result11)){
$product_id2=$row11['product_id'];
$sql12="INSERT INTO $tbl_name2 (keyword,product_id) VALUES ('$keyword','$product_id2')";
mysql_query($sql12);
}
}

查询sql10运行并插入数据,查询sql11不运行。

2 个答案:

答案 0 :(得分:4)

您必须尝试单引号“。$ product_name。”

$sql11 = "SELECT product_id FROM $tbl_name WHERE product_name='" . $product_name . "' ";

答案 1 :(得分:0)

问题不在mysql_fetch_array(),与前面的mysql_query()有关,因此查询字符串$sql11存在问题。

您的代码如下所示:

$sql11="SELECT product_id FROM $tbl_name WHERE product_name=".$product_name."";

了解$tbl_name$product_name是什么有帮助,尤其是$product_name。您没有告诉我们您是否已经转义$product_name,或者是否添加了引号,但我必须假设您没有。

在SQL查询中,所有字符串都必须使用引号。 (您在代码中有引号,但这些是PHP引号,并且不会在查询中结束。)

因此,您应该更改查询以添加引号,如下所示:

$sql11="SELECT product_id FROM $tbl_name WHERE product_name='".$product_name."'";

但是,这不是问题的结束,因为如果$product_name本身包含引号字符,您仍会遇到问题。因此,您还应确保使用mysql_real_escape_string()函数正确转义SQL查询中的变量。

因此(假设您尚未转义$product_name变量),您的代码现在应如下所示:

$sql11="SELECT product_id FROM $tbl_name WHERE product_name='".mysql_real_escape_string($product_name)."'";

最后,在执行SQL查询时应该执行一些基本的错误检查。您可以通过检查$result是否为false来执行此操作,如果是,则使用mysql_error()函数来确定错误的性质。错误可能是由于查询字符串错误(在这种情况下很可能),但也是因为数据库本身的连接问题或者代码中可能没有错误的一些原因。因此,在每mysql_query()之后,您应始终在继续之前检查是否未发生错误。 (如果出现错误,由您决定该怎么做!)。能够应对意外错误是至关重要的,并且通常会使好的程序和坏程序之间产生差异。

我希望有所帮助。