4 回答

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊
由于各種原因,查詢可能失敗,在這種情況下,mysql_*和mysqli擴(kuò)展都將返回false
它們各自的查詢函數(shù)/方法。您需要測試該錯(cuò)誤條件并相應(yīng)地處理它。
MySQL_*擴(kuò)展:
注這個(gè)不推薦MySQL函數(shù)并已在php版本7中刪除。
查帳$result
在把它傳給mysql_fetch_array
。你會發(fā)現(xiàn)false
因?yàn)椴樵兪?。?code>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'];}
$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?)?{ ??????...
使用準(zhǔn)備好的陳述:
$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?)?{ ??????...

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊
當(dāng)查詢中出現(xiàn)導(dǎo)致查詢失敗的錯(cuò)誤時(shí),將顯示此錯(cuò)誤消息。當(dāng)使用:
mysql_fetch_array
/mysqli_fetch_array()
mysql_fetch_assoc()
/mysqli_fetch_assoc()
mysql_num_rows()
/mysqli_num_rows()
注這個(gè)錯(cuò)誤確實(shí)不如果您的查詢沒有影響任何行,則顯示。只有具有無效語法的查詢才會生成此錯(cuò)誤。
故障排除步驟
確保將開發(fā)服務(wù)器配置為顯示所有錯(cuò)誤。通過將其放置在文件的頂部或配置文件中,可以做到這一點(diǎn):
error_reporting(-1);
。如果您有任何語法錯(cuò)誤,這將指向您。使用
mysql_error()
.?mysql_error()
將報(bào)告執(zhí)行查詢時(shí)MySQL遇到的任何錯(cuò)誤。樣本使用情況:
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。如果查詢中有語法錯(cuò)誤,這將告訴您它是什么。
確保你的引號是正確的。查詢周圍缺少的引號或值會導(dǎo)致查詢失敗。
確保你在逃避你的價(jià)值觀。查詢中的引號會導(dǎo)致查詢失敗(還會讓您對SQL注入開放)。使用
mysql_real_escape_string()
逃避你的輸入。確保你沒有混合
mysqli_*
和mysql_*
職能。它們不是一回事,不能一起使用。(如果你要選擇一個(gè)或另一個(gè)堅(jiān)持mysqli_*
。見下文的原因。)

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
'
mysql_query(" SELECT * FROM Users WHERE UserName LIKE '".mysql_real_escape_string ($username)."' ");
mysql_real_escape_string
mysql_real_escape_string
添加回答
舉報(bào)