2009-11-21 73 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); 
    } 
}