0

Здравствуйте. Идея такова- есть таблица MySQL, допустим, с 2мя столбцами:

  1. Столбец id, который Primary Key Not NULL AUTO INKREMENT
  2. Столбец с числовым значением(цена или номер, неважно).

Как выгрузить все значения понял, а как выгружать значения второго столбца в зависимости от id, пока нет. Все вызывается через PHP.

Дополнил вопрос тем что удалось сделать самостоятельно. Знаний PHP не хватает.

<?php
 ini_set('display_errors','On');
 error_reporting(E_ALL);//показ всех ошибок

$host = 'localhost'; // имя хоста $database = 'test_sql'; // имя базы данных $user = 'root'; // имя пользователя $pswd = ''; // пароль

$dbh = mysql_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL.");//соединение с бд mysql_select_db($database) or die("Не могу подключиться к базе."); $query = "SELECT * FROM oc_product";//выгрузка из таблицы $res = mysql_query($query); $row = mysql_fetch_array($res);//вызов массива

while($row = mysql_fetch_array($res)){ echo "ID: ".$row['product_id']."<br>";//вывод всех id echo "Цена: ".$row['price']."<br>";//вывод всех цен } ?>

Ep1demic
  • 2,995
  • select поле from table where id=X – Mike Oct 12 '17 at 09:50
  • Возможно не точно описал вопрос. В дальнейшем значение 2го столбца будет подтягиваться в калькулятор. Если описать полную картину, то юзер заходит на сайт, выбирает товар(он же id) и при использовании калькулятора будет использоваться значение 2го столбца именно этого id. То есть если использовать Ваш запрос, то нужно писать его к каждому id, верно? Это не совсем то что нужно. – Влад Юдкин Oct 12 '17 at 09:55
  • что значит "писать к каждому id". у вас всего 2 варианта: Получить всю таблицу в память и отдать целиком на клиента и пусть он в массиве ищет цену в момент выбора товара. Либо клиент в момент выбора товара шлет запрос на сервер (обычный или ajax) и передает ID. Вы получаете из БД цену по полученному ID и отдаете клиенту – Mike Oct 12 '17 at 10:04
  • Второе либо хорошо описали, то что нужно) Но не совсем понимаю, как записать id=x с посылом id="вот на который сейчас нажали" – Влад Юдкин Oct 12 '17 at 10:08
  • примеры в документации http://php.net/manual/ru/pdostatement.execute.php посмотрите, там как раз параметры передаются в запрос. либо сначала bind потом execute, либо массив параметров передается прямо в execute, что конечно гораздо удобнее – Mike Oct 12 '17 at 10:13
  • Почитал документацию, но в голове ничего не прояснилось. Возможно у Вас есть пример подобного вызова? – Влад Юдкин Oct 12 '17 at 11:09
  • Вы бы описали какой именно момент не понятен. Сначала вам надо получать id от клиента в переменную (т.е. обеспечить ссылку при переходе по которой id будет передан, либо сформировать такой же url средствами ajax), вы это уже сделали ? – Mike Oct 12 '17 at 12:12
  • Нет, все что удалось сделать написано в вопросе. Все больше ковыряя этот вопрос понимаю, что все не понятно... – Влад Юдкин Oct 12 '17 at 12:21
  • ну тогда ответить на вопрос прямо не представляется возможным, поскольку ответ должен будет занять десятки страниц с описанием возможных подходов, которых множество. Так же нужно давать знания из областей html и javascript. https://ru.stackoverflow.com/questions/458485/%D0%9A%D0%BD%D0%B8%D0%B3%D0%B8-%D0%B8-%D1%83%D1%87%D0%B5%D0%B1%D0%BD%D1%8B%D0%B5-%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B-%D0%BF%D0%BE-php – Mike Oct 12 '17 at 12:42

2 Answers2

0
<?php
$product_id = NULL;
if(array_key_exists('product_id',$_GET)){
    $product_id = (int)$_GET['product_id'];
}

$host = 'localhost'; // имя хоста
$port = 3306;
$database = 'test_sql'; // имя базы данных
$user = 'root'; // имя пользователя
$password = ''; //  пароль

$db = new \PDO('mysql:host='.$host.';port='.$port.';dbname='.$database, $user, $password);
echo 'Соединение успешно установлено';

if($product_id !== NULL){
    $query = sprintf(
        'SELECT product_id, price FROM oc_product WHERE id=%s',
        mysql_real_escape_string($product_id)
    );

    $statement = $db->prepare($query); 
    $result = $statement->execute();
    if(is_bool($result)) {
        die('Не могу выполнить запрос.');
    }
    $result->setFetchMode(\PDO::FETCH_ASSOC);
    if($row = $result->fetch()) {
        echo 'Товар: '.$row['product_id'].'. Цена: '.$row['price'].'<br/>';
    }else{
        echo 'Товар не найден.';
    }
}else{
    $query = 'SELECT product_id, price FROM oc_product'
    $statement = $db->prepare($query); 
    $result = $statement->execute();
    if(is_bool($result)) {
        die('Не могу выполнить запрос.');
    }
    $result->setFetchMode(\PDO::FETCH_ASSOC);
    while($row = $result->fetch()) {
        echo '<a href="/index.php?id='.$row['product_id'].'"> Товар: '.$row['product_id'].'</a>. Цена: '.$row['price'].'<br/>';
    }
}
$db = null;

При переходе по ссылке http://my_site/index.php получите список товаров, а при нажатии на товар, запрос SQL выполниться только по нему.

Максим
  • 2,324
  • 2
    пожалуйста, не приводите примеры с использованием старых приемов и особенно с использованием устаревшего расширения mysql, поддержка которого в php практически прекращена и через несколько лет начнет пропадать с хостингов, после чего приведенный код перестанет работать. Используйте примеры только с применением современных расширений mysqli, а лучше PDO. И с использованием привязки переменных, вместо подстановки непосредственно в текст запроса – Mike Oct 12 '17 at 10:20
0

Добрый день, для начала совет такой, если вы пишите в процедурном стили в php, то настоятельно рекомендуется вынести информацию о соединении с БД в отдельный php файл, к примеру под названием(connect.php):

$host = 'localhost'; 
$database = 'test_sql'; 
$user = 'root'; 
$pswd = ''; 

$link = mysql_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL.");

И потом уже где вам нужно просто прописываете вверху команду:

require_once "connect.php" 

Стоит упомянуть почему именно require, а не include. Это все из-за того, что include от require отличается в том, что require падает в Fatal error при невозможности подключения файла по любой причине. А include только выдает Warning и спокойно продолжает работу. Поэтому сами должны понимать , если не получилось прогрузить файл с соединением БД, нет толка дальше продолжать работу. А добавление "_once" нужно для того, чтобы исключить повторное подключение этого файла... Ну а теперь собственно о вашем вопросе, если вам нужно выгрузить значение по id в зависимости от какого события в программе, то вы просто создаете переменную, к примеру:

$number;

И потом уже программно присваиваете ей нужное значение, и выводе данные по значению этой переменной(к примеру присвоим ей id=5):

$number = 5;

$query = "SELECT * FROM oc_product WHERE id= " . $number;
$result = mysqli_query($link, $sql);
$comands = mysqli_fetch_all($result, MYSQLI_ASSOC);

Надеюсь, что мой ответ вам будет полезен, желаю удачи в изучении языка PHP!

QuickDzen
  • 713
  • Спасибо за ответ! Код я уже написал, даже(для меня) перевел его в PDO. Сейчас бьюсь за безопасность и Ваш совет не пройдет мимо. Спасибо еще раз. – Влад Юдкин Oct 14 '17 at 19:49