Я могу получить доступ к базе данных clearDB с помощью Mysql Workbench.
Но когда я запрашиваю базу данных, используя php на Heroku, она всегда дает сбой.
Это мой код:
$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 — входная переменная от пользователя клиента
Помоги мне
Спасибо
Вы не передаете ссылку на 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);
}
Других решений пока нет …