2016-03-23 2 views
-3

Я успешно подключился к своей базе данных, и я попытался распечатать свои данные, но я могу видеть только строку «Connected succesfully» в браузере. Вот мой код:Подключен к базе данных mysql, но не может распечатать данные

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

$db=mysqli_connect("host","root","pass","dbase"); 

if (!$db) { 
    echo "Error: Unable to connect to MySQL." . PHP_EOL; 
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL; 
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL; 
    exit; 
} 
echo "Connected successfully"; 
$sql = "SELECT username FROM students"; 
$result = $db->query($sql); 

if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
    echo "username: " . $row["username"]. "<br>"; 
    } 
} else { 
    echo "0 results"; 
} 
$db->close(); 
?> 

Так что вопрос в том, что SELinux блокировало удаленные соединения из PHP скриптов с помощью веб-сервера Apache. Setsebool -P httpd_can_network_connect = 1 в терминале сделал трюк.

+1

Что находится в журнале ошибок PHP? –

+0

Простой: вы не выбрали базу данных. Вы также используете неправильную переменную '$ conn', это' $ db'. –

+0

Если у вас возникли проблемы с ошибками, почему вы подавляете сообщения об ошибках с помощью '@'? Похоже, что такие сообщения были бы полезны. – Tim

ответ

1

Редактировать: Примечание для будущих читателей. О.П. отредактирован свой вопрос с исправленным синтаксисом после ответов были опубликованы и этот ответ был основан на их исходном сообщении:

и добавил:

«Таким образом, вопрос было то, что SELinux блокировал удаленные соединения из скриптов PHP, выполняемых веб-сервером Apache. В этом терминале был установлен setsebool -P httpd_can_network_connect = 1.

Во-первых, вы не выбрали базу данных.

и if (!db) необходимо изменить на if (!conn) и if ($db->connect_error) до if ($conn->connect_error). Та же переменная должна использоваться во всем коде.

Вы также используете неправильные переменную $db это $conn (или что вы хотите использовать, но, как я уже говорил выше, вы должны использовать то же переменное для подключения и для запроса. Отчеты

Ошибки http://php.net/manual/en/function.error-reporting.php сказал бы вам о неопределенной переменной

Поэтому:.

$conn = @mysqli_connect("host","root","pass", "your_database"); 

Sidenote: host Я принимаю это только представитель хоста вы находитесь с помощью. Если вы находитесь на своем ПК, вы должны использовать localhost и получить доступ к этому файлу как http://localhost/file.php вместо file///file.php, если это то, что вы делаете, и не будет работать. Веб-браузер не будет анализировать такие директивы PHP, как это, и вам нужно установить веб-сервер/PHP для его работы, включая MySQL.

Прочитайте руководство по подключению:

и удалить @ символы при тестировании. Они являются подавителями ошибок.

Проверка на наличие ошибок с http://php.net/manual/en/mysqli.error.php

Пример из руководства:

Sidenote: 127.0.0.1 или localhost или если принимал, используйте параметр они дали вам использовать.

<?php 
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db"); 

if (!$link) { 
    echo "Error: Unable to connect to MySQL." . PHP_EOL; 
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL; 
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL; 
    exit; 
} 

echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL; 
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL; 

mysqli_close($link); 

Добавить error reporting в верхней части файла (ов), который поможет найти ошибки.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// Then the rest of your code 

Sidenote: Отображение ошибок не должно быть сделано только в постановке, и никогда производства.

0

Вы используете другую переменную, чем вы подключились к базе данных!

Вы подключены к $db, но выполняете запрос с помощью $conn. Кроме того, в случае установления соединения с базой данных у вас нет $ до db.

Это всегда помогает, когда у вас в терминальном окне открыт журнал ошибок PHP. 99% ошибок могут быть исправлены самим собой.

+0

Вы видели мой комментарий, я его принимаю ;-), потому что вы полностью изменили свой ответ со своего оригинала. –

+0

@ Fred-ii- Мой первый ответ был неправильным из-за неформатированного текста. Я наблюдал за «если». Затем я удалил сообщение, потому что это не проблема. При форматировании кода - у меня недостаточно репутации, которую он сразу же опубликовал, - я увидел реальную ошибку и восстановил мой пост и написал свой ответ. Но да, ты лучший. –

+0

No problemo Al - * cheers * –

Смежные вопросы