[英]PHP stops running script
我寫了這個腳本,你去了localhost / censor.php / query,看看它是否被采用。 這是代碼:
<?php
function curPageURL() {
$pageURL = 'http';
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80")
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
else
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
return $pageURL;
}
$test = curPageURL();
$test = str_replace('http://localhost/censor.php/',"",$test);
$con = mysqli_connect("localhost","root","creepers2","spider");
if (mysqli_connect_errno())
echo "Failed to connect to MySQL: " . mysqli_connect_error();
$usname = null;
$result = mysqli_query($con, "SELECT * FROM main WHERE urls='$test'");
while($row = mysqli_fetch_array($result) or die(mysqli_error($con))) {
$usname = $row['urls'];
if ($usname=$test)
echo "Taken!";
else
echo"YEAH!";
}
mysqli_close($con);
?>
如果您訪問localhost / censor.php / queryinthedatabase,則會打印出來。 但是,如果你去localhost / censor.php / querynotinthedatabase,它什么都不打印。 請幫助?
您正在進行一個簡單的查詢: SELECT * FROM main WHERE urls='$test'
。 那很好(除了SQL注入)。
現在,您通過使用while($row = mysqli_fetch_array($result) or die(mysqli_error($con)))
獲取所有結果並循環遍歷它們。 也就是說,如果沒有結果,它將不會遍歷任何對象,因為它無法獲取任何對象。
你應該使用像mysqli_num_rows
這樣的mysqli_num_rows
。 例如:
$result = mysqli_query($con, "SELECT * FROM main WHERE urls='" . mysqli_real_escape_string($test) . "'");
if (mysqli_num_rows($result) == 1) {
echo "Taken!";
}
else {
echo "YEAH!";
}
現在,您正在執行相同的查詢(選擇urls
等於$test
所有行),但不是循環返回的行,而是計算查詢返回的行數。 如果它等於1
,則采用它。
另外,請轉義您在查詢中輸入的任何用戶輸入; 不要成為SQL注入的另一個受害者。 永遠不要相信用戶!
問題是你使用if ($usname=$test)
而不是if ($usname==$test)
您在if語句中分配一個變量值是錯誤的,您應該使用雙equl coparison運算符來比較它們,只需更改
if ($usname==$test)
另外,為了調試您的查詢,您應該將mysqli_error移動到查詢本身
$result = mysqli_query($con, "SELECT * FROM main WHERE urls='$test'") or die(mysqli_error($con));
while($row = mysqli_fetch_array($result)) {
你的代碼非常容易受到mysql注入的攻擊,在這篇有用的文章中了解更多如何在PHP中防止SQL注入? 你應該使用准備好的聲明來避免任何風險。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.