ошибка запроса при доступе к базе данных 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');

Учетная запись пользователя - это таблица в базе данных, $учетная запись пользователя - это входная переменная от пользователя клиента

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

Author: user2865769, 2014-12-04

1 answers

Вы не передаете ссылку на 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);
}
 0
Author: dzuelke, 2014-12-05 14:48:34