找不到MySQL行但是它在那里

时间:2016-02-25 18:32:32

标签: php mysql database mysqli

我正在使用PHP尝试从MySQL数据库中的表中选择一行。我在phpMyAdmin4中手动运行查询,它返回了预期的结果。但是,当我在PHP中运行EXACT相同的查询时,它什么也没有返回。

$query = "SELECT * FROM characters WHERE username=".$username." and charactername=".$characterName."";
if($result = $mysqli->query($query))
{
        while($row = $result->fetch_row())
        {
            echo $row[0];    
        }
        $result->close();
}
else
        echo "No results for username ".$username." for character ".$characterName.".";

当我在浏览器中测试时,我得到了“没有结果......”的回应。我做错了吗?

这不是一个重复的问题,因为我不会问何时使用某些引号和反引号。我正在寻求帮助,说明为什么我的查询不起作用。行情恰好是不正确的,但即使纠正了问题也没有解决。以下是已编辑的代码以及其余部分。我出于显而易见的原因删除了我的服务器信息。

<?PHP
$username = $_GET['username'];
$characterName = $_GET['characterName'];

$mysqli = new mysqli("REDACTED","REDACTED","REDACTED");

if(mysqli_connect_errno())
{
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
}

$query = "SELECT * FROM `characters` WHERE `username`='".$username."' and `charactername`='".$characterName."'";

if($result = $mysqli->query($query))
{
        while($row = $result->fetch_row())
        {
            echo $row[0];    
        }

        $result->close();
}
else
        echo "No results for username ".$username." for character ".$characterName.".";

$mysqli->close();
?>

2 个答案:

答案 0 :(得分:1)

失败了:$mysqli = new mysqli("REDACTED","REDACTED","REDACTED");因为你没有选择数据库。

使用MySQLi API连接数据库需要4个参数:

如果您不需要密码,则仍需要一个(空)参数。

即:$mysqli = new mysqli("host","user", "", "db");

另外,如上所述。

您目前的代码向SQL injection开放。使用mysqli_* with prepared statementsPDOprepared statements

<强>脚注:

正如original post中所述。字符串需要引用值。

答案 1 :(得分:0)

您需要在查询中为字符串添加引号:

$query = "SELECT * 
    FROM characters 
    WHERE username='".$username."' and charactername='".$characterName."'";