亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

mysql_fetch_array()/mysql_fetch等…期望參數1是資源或結果

mysql_fetch_array()/mysql_fetch等…期望參數1是資源或結果

開滿天機 2019-05-30 17:37:00
我正在嘗試從MySQL表中選擇數據,但我得到了以下錯誤消息之一:MySQL_FETCH_Array()期望參數1是資源,布爾給定或mysqli_FETCH_Array()期望參數1為mysqli_test,布爾給定或調用布爾/非對象上的成員函數FETCH_Array()這是我的密碼:$username = $_POST['username'];$password = $_POST['password'];$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');while($row = mysql_fetchmysql_fetch_array()/mysql_fetch等…期望參數1是資源或結果_array($result)) {    echo $row['FirstName'];}同樣的情況也適用于以下代碼$result = mysqli_query($mysqli, 'SELECT ...');// mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean givenwhile( $row=mysqli_fetch_array($result) ) {    ...和$result = $mysqli->query($mysqli, 'SELECT ...');// Call to a member function fetch_assoc() on a non-objectwhile( $row=$result->fetch_assoc($result) ) {    ...和$result = $pdo->query('SELECT ...', PDO::FETCH_ASSOC);// Invalid argument supplied for foreach()foreach( $result as $row ) {    ...和$stmt = $mysqli->prepare('SELECT ...');// Call to a member function bind_param() on a non-object$stmt->bind_param(...);和$stmt = $pdo->prepare('SELECT ...');// Call to a member function bindParam() on a non-object$stmt->bindParam(...);
查看完整描述

4 回答

?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

由于各種原因,查詢可能失敗,在這種情況下,mysql_*和mysqli擴展都將返回false它們各自的查詢函數/方法。您需要測試該錯誤條件并相應地處理它。

MySQL_*擴展:

這個不推薦MySQL函數并已在php版本7中刪除。

查帳$result在把它傳給mysql_fetch_array。你會發現false因為查詢失敗。見mysql_query可能返回值的文檔以及如何處理這些值的建議。

$username?=?mysql_real_escape_string($_POST['username']);$password?=?$_POST['password'];$result?=?mysql_query("SELECT?*?FROM?Users?WHERE?
UserName?LIKE?'$username'");if($result?===?FALSE)?{?
????die(mysql_error());?//?TODO:?better?error?handling}while($row?=?mysql_fetch_array($result)){
????echo?$row['FirstName'];}

mysqli擴展
程序風格:

$username?=?mysqli_real_escape_string($mysqli,?$_POST['username']);$result?=?mysqli_query($mysqli,?"SELECT?*?FROM?Users?WHERE?UserName?LIKE?
'$username'");//?mysqli_query?returns?false?if?something?went?wrong?with?the?queryif($result?===?FALSE)?{?
????yourErrorHandler(mysqli_error($mysqli));}else?{
????//?as?of?php?5.4?mysqli_result?implements?Traversable,?so?you?can?use?it?with?foreach
????foreach(?$result?as?$row?)?{
????????...

歐式:

$username?=?$mysqli->escape_string($_POST['username']);$result?=?$mysqli->query("SELECT?*?FROM?Users?WHERE?UserName?LIKE?'$username'");
if($result?===?FALSE)?{?
????yourErrorHandler($mysqli->error);?//?or?$mysqli->error_list}else?{
????//?as?of?php?5.4?mysqli_result?implements?Traversable,?so?you?can?use?it?with?foreach
????foreach(?$result?as?$row?)?{
??????...

使用準備好的陳述:

$stmt?=?$mysqli->prepare('SELECT?*?FROM?Users?WHERE?UserName?LIKE??');if?(?!$stmt?)?{
????yourErrorHandler($mysqli->error);?//?or?$mysqli->error_list}else?if?(?!$stmt->bind_param('s',?$_POST['username'])?)?{
????yourErrorHandler($stmt->error);?//?or?$stmt->error_list}else?if?(?!$stmt->execute()?)?{
????yourErrorHandler($stmt->error);?//?or?$stmt->error_list}else?{
????$result?=?$stmt->get_result();
????//?as?of?php?5.4?mysqli_result?implements?Traversable,?so?you?can?use?it?with?foreach
????foreach(?$result?as?$row?)?{
??????...


查看完整回答
反對 回復 2019-05-30
?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

當查詢中出現導致查詢失敗的錯誤時,將顯示此錯誤消息。當使用:

  • mysql_fetch_array/mysqli_fetch_array()

  • mysql_fetch_assoc()/mysqli_fetch_assoc()

  • mysql_num_rows()/mysqli_num_rows()

這個錯誤確實如果您的查詢沒有影響任何行,則顯示。只有具有無效語法的查詢才會生成此錯誤。

故障排除步驟

  • 確保將開發服務器配置為顯示所有錯誤。通過將其放置在文件的頂部或配置文件中,可以做到這一點:error_reporting(-1);。如果您有任何語法錯誤,這將指向您。

  • 使用mysql_error().?mysql_error()將報告執行查詢時MySQL遇到的任何錯誤。

    樣本使用情況:

    mysql_connect($host,?$username,?$password)?or?die("cannot?connect");?mysql_select_db($db_name)?or?die("cannot?select?DB");
    $sql?=?"SELECT?*?FROM?table_name";$result?=?mysql_query($sql);if?(false?===?$result)?{
    ????echo?mysql_error();}
  • 從MySQL命令行或類似于phpMyAdmin。如果查詢中有語法錯誤,這將告訴您它是什么。

  • 確保你的引號是正確的。查詢周圍缺少的引號或值會導致查詢失敗。

  • 確保你在逃避你的價值觀。查詢中的引號會導致查詢失敗(還會讓您對SQL注入開放)。使用mysql_real_escape_string()逃避你的輸入。

  • 確保你沒有混合mysqli_*mysql_*職能。它們不是一回事,不能一起使用。(如果你要選擇一個或另一個堅持mysqli_*。見下文的原因。)

查看完整回答
反對 回復 2019-05-30
?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

這里發生錯誤是由于使用單引號(')。您可以這樣放置查詢:

mysql_query("
SELECT * FROM Users 
WHERE UserName 
LIKE '".mysql_real_escape_string ($username)."'
");

它正在使用mysql_real_escape_string用于防止SQL注入。雖然我們應該使用MySQLi或PDO_MySQL擴展來升級PHP版本(PHP5.5.0及更高版本),但是對于舊版本mysql_real_escape_string會成功的。


查看完整回答
反對 回復 2019-05-30
  • 4 回答
  • 0 關注
  • 1235 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號