PHP停止运行脚本

时间:2013-05-27 23:20:40

标签: php mysql mysqli

我写了这个脚本,你去了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,它什么都不打印。 请帮忙吗?

3 个答案:

答案 0 :(得分:2)

您正在进行简单的查询:SELECT * FROM main WHERE urls='$test'。这很好(除了SQL注入)。

现在,您正在使用while($row = mysqli_fetch_array($result) or die(mysqli_error($con)))获取所有结果并循环显示它们。也就是说,如果没有结果,它就不会遍历任何对象,因为它无法获取任何对象。

您应该使用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注入的另一个受害者。 永远不要相信用户!

答案 1 :(得分:0)

问题是您使用的是if ($usname=$test)而不是if ($usname==$test)

答案 2 :(得分:0)

您在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注入攻击,请在此有用的帖子中了解更多信息How can I prevent SQL injection in PHP?您应该使用预准备语句来避免任何风险。