2009-11-21 68 views
0

下面的代码是给错误:mysql_fetch_array()给错误

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in W:\Aptana WorkSpace\Website\lib\filldropdown.php on line 22

<?php 
error_reporting(E_ALL^E_NOTICE); 

$db_host = 'localhost:3306'; 
$db_username = 'superuser'; 
$db_password = 'admin'; 
$db_name = 'exampledb'; 

//connect to the database server 
$connection = mysql_connect($db_host, $db_username, $db_password) or die(mysql_error()); 
//select database 
$db = mysql_select_db($db_name, $connection); 

$dropdownControlName = $_GET['DropDownControlName']; 
$divName = $_GET['DivName']; 
$sqlQuery = $_GET['SqlQuery']; 
$result = mysql_query($sqlQuery); 
?> 
<select name=" <?php $dropdownControlName ?> "> 
<option>Select Category</option> 
<?php while($row=mysql_fetch_array($result)) 
{ ?> 
    <option value="<?= $row[0] ?>"><?= $row[1] ?></option> 
<?php } ?> 
</select> 
+0

相关:mysql_fetch_array()预计参数1是资源,在选择定的boolean(http://stackoverflow.com/问题/ 2973202/mysql-fetch-array-expect-parameter-1-to-resource-boolean-given-in-select) – hakre 2012-12-25 01:58:15

回答

1

一般来说,这意味着什么是不对您的SQL。尝试回显sql以查看它看起来是否正确。

(另外,直接在传递一个GET变量作为查询是在安全意义上的非常糟糕的主意 - 你只是询问一些恶意用户滥用完全开放,并危及您的数据库。)

+0

目前仅用于测试下拉菜单。将改善它。 – RKh 2009-11-21 07:08:34

1

有几件事要尝试:

  1. 在mysql客户端内部运行查询,100%确定它是正确的。如果它不会在客户端执行,它将不会通过DBI执行。

  2. 将查询传递给DBI之前打印出查询。通常你会发现某些东西被奇怪地引用,并且在将它传递给MySQL之前需要以不同的方式进行转义。

+0

我想echo($ sqlQuery),但它没有显示任何东西在屏幕上。可能它隐藏在HTML表单后面。 – RKh 2009-11-21 07:27:00

0

好吧,我发现了这个问题。 GET没有收到任何价值。下面是我使用的调用上面的PHP代码文件的AJAX代码:

function MakeRequest(DivName, DropDownName, SqlQuery) 
{ 
    var xmlHttp = getXMLHttp(); 

    var strUrl = "./lib/filldropdown.php?DivName = " + DivName + "&DropDownControlName = " + DropDownName + "&SqlQuery = " + SqlQuery; 

    try 
    { 
    xmlHttp.onreadystatechange = function() 
    { 
     if (xmlHttp.readyState == 4) 
     { 
      HandleResponse(xmlHttp.responseText, DivName); 
     } 
    } 
      xmlHttp.open("GET", strUrl, true); 
      xmlHttp.send(null); 
    } 
    catch(err) 
    { 
     alert(err); 
    } 
}