我正在使用 PHP 尝试从 MySQL 数据库的表中选择一行。我已在 phpMyAdmin4 中手动运行查询,它返回了预期结果。但是,当我在 PHP 中运行完全相同的查询时,它什么也没有返回。
$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();
?>
最佳答案
失败:$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 中所述。字符串需要在值中加引号。
关于php - MySQL 行未找到但确实存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35635439/