我可以使用Mysql Workbench很好地访问clearDB数据库。
但是当我在Heroku上使用php查询数据库时,它总是失败。
这是我的代码:
$url=parse_url(getenv("CLEARDB_DATABASE_URL"));
$dbhost = $url["host"];
$dbuser = $url["user"];
$dbpass = $url["pass"];
$dbname = substr($url["path"],1);
mysqli_connect($dbhost, $dbuser, $dbpass);
mysqli_select_db($dbname);
$sql = "SELECT * FROM `user_info` WHERE `user_account`='".$user_account."'";
$result = mysqli_query($sql) or die('MySQL query error');
user_account是数据库中的表,$ user_account是来自客户端用户的输入变量
帮助我 感谢答案 0 :(得分:0)
您没有将链接传递给mysqli_query()
。您需要执行此操作,或使用面向对象的样式并在连接上调用query()
。
你也有一个可能的SQL注入,因为$user_account
可以包含“foo' OR 1 OR '
”,返回所有行(这只是一个简单的,不是非常邪恶的情况),所以你应该使用mysqli_real_escape_string()
,甚至更好,使用准备好的陈述。
最后,代替or die()
,如何正确提取错误信息,甚至配置mysqli以抛出异常?
<?php
$url = parse_url(getenv("CLEARDB_DATABASE_URL"));
$server = $url["host"];
$username = $url["user"];
$password = $url["pass"];
$db = substr($url["path"], 1);
$conn = new mysqli($server, $username, $password, $db);
$sql = "SELECT * FROM `user_info` WHERE `user_account`='".$conn->real_escape_string($user_account)."'";
if($result = $conn->query($sql)) {
foreach($result as $row) {
// ...
}
} else {
throw new Exception($conn->error);
}