2014-01-19 4 views
1

Я использую этот код для своего школьного проекта, в котором моя программа должна иметь возможность автоматически отвечать на запросы, которые были отправлены ему с использованием программы с открытым исходным кодом.PDO в MySQL-запросе через переменные String

Мне удалось создать простой автоответ с ним с помощью того, кто хорошо осведомлен об этом. Однако я борюсь за получение значений через PHP-MySQL со строковыми переменными.

$reqproduct = $db->query("SELECT Crop FROM crops WHERE Crop = '$product'"); 
$reqprice = $db->query("SELECT Price FROM crops WHERE Crop = '$product'"); 

И, конечно же, я потерпел неудачу ужасно.

Затем я попытался изучить PHP: PDO, но я все равно зациклился на том, как использовать его команды даже с помощью своей документации.

Вот отрывок из того, что я пытаюсь сделать:

<?php 
    try{ 
    //test database connection 
    $db = new PDO('mysql:host=localhost;dbname=gammu;','root'); 
    echo "Connected<p>";} 
    catch (Exception $e){echo "Unable to connect: " . $e->getMessage() ."<p>";} 

    //get data from database through decoded message 
     $product = 'Okra'; //sample decoded message 

     $sth = $db->prepare('SELECT Crop FROM crops WHERE Crop = :product'); 
     $sth->execute(array(':product' => "{$product}")); 
     $result = $sth->fetchAll(); 
     foreach ($result as $row) { $reqproduct = $row; break;} 
     $sth = $db->prepare('SELECT Price FROM crops WHERE Crop = :product'); 
     $sth->execute(array(':product' => "{$product}")); 
     $result = $sth->fetchAll(); 
     foreach ($result as $row) { $reqprice = $row; break;} 

    //to be sent to the sender 
     $message = "The price of $reqproduct is $reqprice/kilo." ; 
     echo $message; 
    $db = null; 
?> 

Я хотел бы получить значение, что внутри $ сообщения, любая помощь будет очень ценна.

Также, crops.sql содержит 3 колонки. А именно: «ID», «Crop» и «Price».

+0

Вы должны иметь в своей строке pdo пользователя и пароль, я вижу только пользователя. – Mihai

+0

Чтобы помочь вам понять содержимое '$ row' и' $ result', используйте 'var_dump ($ result);' и 'var_dump ($ row);' Первый - это 2D-массив, содержащий второй. Поэтому вам нужно получить значение 'Crop' по индексу массива. '$ reqprice = $ row ['Crop'];' –

+1

В противном случае ваш код довольно хорош. Я бы рекомендовал использовать отступы вместо встроенных блоков '{}' в структурах управления, таких как 'foreach', и не использовать' '{$ product}' ', когда вам просто нужна переменная' $ product'. –

ответ

0

Есть еще помощь снова, вот лучший код. :)

$crop_query = $db->query("SELECT Crop, Price FROM crops WHERE Crop = '{$product}' "); 
    $crop_query->execute(array(':product' => "{$product}")); 
    $result = $crop_query->fetch(PDO::FETCH_OBJ); //just fetch one row 

    $message = "The price of {$result->Crop} is {$result->Price}/kilo"; 
+0

Примите этот ответ, чтобы отметить вопрос как решенный; сделайте это, щелкнув выделенную галочку под стрелкой вниз. Я редактирую ваш заголовок, поскольку [решено] не должно быть там. – Daedalus

1

Вы здесь делаете неправильно.

Во-первых SQL может грейферы несколько столбцов сразу, так это должно пойти в один запрос, как это:

SELECT Crop, Price FROM crops WHERE Crop = 'product'

Затем, когда вы делаете MySQL выборки вы можете получить значение из строки, как это :

$crop = $row['Crop']; 
$price = $row['Price']; 

Каждый столбец сопоставляется с элементом в массиве. Чтобы увидеть, как это выглядит попробовать:

var_dump($row); после вызова fetchAll

См FETCH_ASSOC здесь: http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

+1

Да, мое плохое. Я просто скопировал часть reqprice при публикации вопроса. Кроме того, часть WHERE Crop = 'product' будет запрашивать только строку, а не переменную, что также было моей проблемой перед перемещением на PHP: PDO, как было выражено в вопросе. – Dahh

+0

В настоящее время читаем, спасибо за предложение btw :) – Dahh

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