У меня есть таблица базы данных MySQL, содержащая продукты и цены. Хотя html-форму я получил имя продукта в определенном файле php. Для операции в этом файле, которую я хочу сделать, мне также нужна соответствующая цена.
Для меня следующее выглядит достаточно ясно, чтобы сделать это:
$price = mysql_query("SELECT price FROM products WHERE product = '$product'");
Однако его эхо возвращает:
Resource id #5
вместо этого значение вроде:
59.95
Кажется, есть другие варианты, такие как mysqli_fetch_assoc mysqli_fetch_array. Но я не могу заставить их выводить что-либо значимое, и я не знаю, какой из них использовать.
Заранее спасибо.
Вам нужно будет извлечь данные из своей базы данных
$price = mysql_query("SELECT price FROM products WHERE product = '$product'"); $result = mysql_fetch_array($price);
Теперь вы можете распечатать его с помощью
echo $result['price'];
В качестве побочного примечания я бы посоветовал вам перейти на PDO
или mysqli
поскольку mysql_*
api устарели и скоро перестанут использоваться
Если вы прочитаете руководство на PHP.net ( ссылка ), он покажет вам, что именно делать.
Короче говоря, вы выполняете запрос с помощью mysql_query (как и вы), который возвращает Result-Resource. Чтобы получить результаты, вам нужно выполнить mysql_fetch_array
, mysql_fetch_assoc
или mysql_fetch_object
в ресурсе результата. Вот так:
$res = mysql_query("SELECT something FROM somewhere"); // perform the query on the server $result = mysql_fetch_array($res); // retrieve the result from the server and put it into the variable $result echo $result['something']; // will print out the result you retrieved
Помните, однако, что вы больше не должны использовать расширение mysql; он официально устарел. Вместо этого вы должны использовать PDO или MySQLi . Таким образом, лучший способ выполнить один и тот же процесс, но, например, использование расширения MySQLi будет:
$db = new mysqli($host, $username, $password, $database_name); // connect to the DB $query = $db->prepare("SELECT price FROM items WHERE itemId=?"); // prepate a query $query->bind_param('i', $productId); // binding parameters via a safer way than via direct insertion into the query. 'i' tells mysql that it should expect an integer. $query->execute(); // actually perform the query $result = $query->get_result(); // retrieve the result so it can be used inside PHP $r = $result->fetch_array(MYSQLI_ASSOC); // bind the data from the first result row to $r echo $r['price']; // will return the price
Причина, по которой это лучше, заключается в том, что она использует подготовленные заявления. Это более безопасный способ, поскольку он делает атаки SQL-инъекций невозможными. Представьте, что кто-то является злонамеренным пользователем и предоставляет $itemId = "0; DROP TABLE items;"
, Используя оригинальный подход, это приведет к удалению всей вашей таблицы! Используя подготовленные запросы в MySQLi, он вернет ошибку, указав, что $itemId is not an integer
и, как таковой, не уничтожит ваш скрипт.