ошибка запроса при доступе к базе данных clearDB с использованием php на Heroku

Я могу получить доступ к базе данных 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 — входная переменная от пользователя клиента

помогите мне спасибо


person user2865769    schedule 04.12.2014    source источник
comment
Является ли user_account таблицей или полем в таблице user_info? И добавьте сообщение об ошибке, если вы его получаете.   -  person Louis Huppenbauer    schedule 04.12.2014
comment
user_account — это поле в таблице user_info. И я просто получаю «Ошибка запроса MySQL»   -  person user2865769    schedule 18.12.2014
comment
дзуэлька решит мою проблему. Спасибо за помощь   -  person user2865769    schedule 18.12.2014


Ответы (1)


Вы не передаете ссылку на 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);
}
person dzuelke    schedule 05.12.2014
comment
Спасибо, что решили мою проблему. - person user2865769; 18.12.2014