2015-01-05 2 views
0

Я пытаюсь запросить базу данных MySQL с PHP и вернуть результаты как JSON. Я новичок в PHP и веб-разработке, поэтому я не уверен, что я делаю неправильно. Я создал базу данных с помощью MAMP. Мои параметры печатаются, но я не получаю JSON. Я получил это далеко с помощью учебника.Запрос MySQL с PHP

EDIT: Я просто зашел в phpMyAdmin, чтобы убедиться, что он работает, и когда я нажимаю на Server: localhost: 8889, появляется окно, в котором говорится об ошибке в запросе обработки. Код ошибки 404.

Я думаю, что это проблема, я просто не знаю, почему она не работает. Я могу переустановить MAMP.

<?php 

$user = 'root'; 
$password = 'root'; 
$db = 'TestDB'; 
$host = '127.0.0.1'; 
$port = '8889'; 

$first_name = filter_input(INPUT_GET, 'first_name'); 
$last_name = filter_input(INPUT_GET, 'last_name'); 
$membership_number = filter_input(INPUT_GET, 'membership_number'); 

echo $first_name; 
echo $last_name; 
echo $membership_number; 

// Create connection 
    // $con = mysqli_connect("localhost", "root", "root", "TestDB"); 
    // $con = mysqli_connect("localhost", "root", "root", "TestDB", "8889", $socket); 
    $link = mysqli_init(); 
    $con = mysqli_real_connect($link, $host, $user, $password, $db, $port); 

    // Check connection 
    if(mysqli_connect_errno()) { 
     echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

    $sql = "SELECT * FROM NAME WHERE FIRST_NAME = \'$first_name\' and LAST_NAME = \'$last_name\' and MEMBERSHIP_NUMBER = \'$membership_number\'"; 

    $result = mysqli_query($con, $sql); 

    if(!$result) { 
     die('Query failed: ' . mysqli_error()); 
    } 

    // Check for results 
    // if ($result = mysqli_query($con, $sql)) { 
    if($result) { 
     // If there are results, create results array and a temporary one to hold the data 
     $resultArray = array(); 
     $tempArray = array(); 

     // Loop through each row in the result set 
     // while($row = $result->fetch_object()) { 
     while($row = mysqli_fetch_object($result)) { 
      // Add each row to the results array 
      $tempArray = $row; 
      array_push($resultArray, $tempArray); 
     } 

     echo $tempArray; 
     echo $resultArray; 
     echo $result; 

     echo json_encode($resultArray); 
    } 

    // Close connections 
    mysqli_close($con); 

?> 
+0

Вы получаете массив результатов обратно в $ resultArray? – AwesomeGuy

+1

Звучит так, как будто ваше условие 'if' никогда не возникает. Получаете ли вы результат? Вы не проверяете ваш запрос. –

ответ

2

Вы должны изменить вас $sql переменную, чтобы удалить экранирует одиночные кавычки. Они регистрируются как часть строки, потому что вы используете двойные кавычки для ее переноса. В основном, вы сообщаете базе данных для запуска запроса «SELECT * FROM NAME WHERE FIRST_NAME = \'John\' and LAST_NAME = \'Smith\' and MEMBERSHIP_NUMBER = \'VRX78435\'». Это приведет к ошибке, если вы запустите его напрямую, потому что escape-символы не экранируются.

$sql = "SELECT * FROM NAME WHERE FIRST_NAME = '$first_name' and LAST_NAME = '$last_name' and MEMBERSHIP_NUMBER = '$membership_number'"; 

Это должно исправить это для вас.

Также может возникнуть проблема с вашим подключением к серверу. mysqli_query() использует результаты mysqli_connect() для выполнения запроса. mysqli_real_connect() возвращает только логическое значение, поэтому оно недействительно для данного использования (по крайней мере, он не работал на моем сервере).

Это было бы простым решением заменить $con, а затем вы можете удалить переменную $link.

$con = mysqli_connect($host, $user, $password, $db, $port); 

Эти изменения, и предполагая, что $first_name, $last_name и $membership_number все действительны, разрешено сценарий для запуска для меня, так что я надеюсь, что это помогает.

+0

Спасибо! Были использованы кавычки вместе с идеей mysqli_connect. – raginggoat

+1

Я рад, что смогу помочь. Так же, как хэдз-ап, хотя mysqli является стандартом, я настоятельно рекомендую вам перейти на использование формата PDO. –

+0

Вы правы. – fortune

2

Кажется, вы используете процедурный стиль кодирования

Вместо

while($row = $result->fetch_object()) { 

Вам нужно mysqli_fetch_object в процедурном стиле

while($row = mysqli_fetch_object($result)) { 
+0

Я обновил код. – raginggoat

+0

Работает ли он? – fortune

+0

Нет, это точно. Я не получаю результата. Как я могу напечатать ошибку в if (! $ Result) {}? – raginggoat