我正在使用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();
?>
答案 0 :(得分:1)
失败了:$mysqli = new mysqli("REDACTED","REDACTED","REDACTED");
因为你没有选择数据库。
使用MySQLi API连接数据库需要4个参数:
如果您不需要密码,则仍需要一个(空)参数。
即:$mysqli = new mysqli("host","user", "", "db");
另外,如上所述。
您目前的代码向SQL injection开放。使用mysqli_*
with prepared statements或PDO与prepared statements。
<强>脚注:强>
正如original post中所述。字符串需要引用值。
答案 1 :(得分:0)
您需要在查询中为字符串添加引号:
$query = "SELECT *
FROM characters
WHERE username='".$username."' and charactername='".$characterName."'";