Как я могу получить переменные PHP из этого запроса MySQL? - PullRequest
2 голосов
/ 18 мая 2010

Я работаю над проблемой базы данных активов, используя PHP / MySQL.

В этом сценарии я хотел бы найти мои активы по идентификатору ресурса и вернуть все связанные поля.

Сначала я запрашиваю таблицу ресурсов базы данных и нахожу тип актива. Затем в зависимости от типа я запускаю 1 из 3 запросов.

<?php

//make database connect
mysql_connect("localhost", "asset_db", "asset_db") or die(mysql_error());
mysql_select_db("asset_db") or die(mysql_error());

//get type of asset
$type = mysql_query("
SELECT asset.type
From asset
WHERE asset.id = 93120
")
or die(mysql_error());

switch ($type){
    case "Server":
        //do some stuff that involves a mysql query
        mysql_query("
        SELECT asset.id
        ,asset.company
        ,asset.location
        ,asset.purchase_date
        ,asset.purchase_order
        ,asset.value
        ,asset.type
        ,asset.notes
        ,server.manufacturer
        ,server.model
        ,server.serial_number
        ,server.esc
        ,server.user
        ,server.prev_user
        ,server.warranty
        FROM asset
        LEFT JOIN server
        ON server.id = asset.id
        WHERE asset.id = 93120
        ");
        break;
    case "Laptop":
        //do some stuff that involves a mysql query
        mysql_query("
        SELECT asset.id
        ,asset.company
        ,asset.location
        ,asset.purchase_date
        ,asset.purchase_order
        ,asset.value
        ,asset.type
        ,asset.notes
        ,laptop.manufacturer
        ,laptop.model
        ,laptop.serial_number
        ,laptop.esc
        ,laptop.user
        ,laptop.prev_user
        ,laptop.warranty
        FROM asset
        LEFT JOIN laptop
        ON laptop.id = asset.id
        WHERE asset.id = 93120
        ");
        break;  
    case "Desktop":
        //do some stuff that involves a mysql query
        mysql_query("
        SELECT asset.id
        ,asset.company
        ,asset.location
        ,asset.purchase_date
        ,asset.purchase_order
        ,asset.value
        ,asset.type
        ,asset.notes
        ,desktop.manufacturer
        ,desktop.model
        ,desktop.serial_number
        ,desktop.esc
        ,desktop.user
        ,desktop.prev_user
        ,desktop.warranty
        FROM asset
        LEFT JOIN desktop
        ON desktop.id = asset.id
        WHERE asset.id = 93120
        ");
        break;  
}

?>

Пока что я могу получить asset.type в $ type. Как мне получить остальные переменные (laptop.model для $ model, asset.notes для $ notes и т. Д.)?

Спасибо.

Ответы [ 6 ]

2 голосов
/ 18 мая 2010
$sql = "YOUR QUERY";
$res = mysql_query($sql);

while($row = mysql_fetch_assoc($res))
{
    echo 'Start Record<br />';
    echo $row['type'].'<br />';
    echo $row['company'].'<br />';
    echo $row['location'].'<br />';
    echo 'End Record<br /> <br />';
}

Попробуйте, чтобы увидеть, что вы получите, тогда вы можете использовать данные по своему желанию;

Вы также можете посмотреть на mysql_fetch_array, mysql_fetch_row или mysql_fetch_object. Выберите наиболее подходящий для вас.

1 голос
/ 18 мая 2010

Полагаю, вы захотите сделать что-то вроде этого:

$result = mysql_query($query);
$i = array();
while ($data = mysql_fetch_assoc($result)) {
 $i[] = $data;
}

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

foreach ($i as $key => $value) {
  echo $value['model'];
  echo $value['serial'];
  etc......
}
1 голос
/ 18 мая 2010

То, что вы делаете, не будет работать:

$type = mysql_query("
SELECT asset.type
From asset
WHERE asset.id = 93120
")

Это помещает набор результатов в тип $, а не в сам тип.

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

$result = mysql_query("
SELECT asset.type
From asset
WHERE asset.id = 93120
")
if($row = mysql_fetch_object($result)){
  $type = $row->type;

  // NOW you have the type in $type. Do something similar with the rest of the queries.
}
0 голосов
/ 18 мая 2010

это должен быть только один стол computers

твой код будет просто:

<?php
//make database connect
mysql_connect("localhost", "asset_db", "asset_db") or die(mysql_error());
mysql_select_db("asset_db") or die(mysql_error());

$sql = "SELECT a.id, a.company, a.location, a.purchase_date, a.purchase_order,
               a.value, a.type, a.notes, c.manufacturer, c.model, 
               c.serial_number, c.esc, c.user, c.prev_user, c.warranty
        FROM asset a
        LEFT JOIN computers c
        ON c.id = a.id
        WHERE a.id = 93120";
$res = mysql_query($sql) or trigger_error(mysql_error().$sql);
$data=array();
while($row = mysql_fetch_assoc($res)) $data[] = $row;
// now $data array contains all the rows returned
?>

Каждый раз, когда вы видите удвоенный код, вы знаете, что делаете что-то не так.

0 голосов
/ 18 мая 2010

Вы можете взглянуть на http://php.net/manual/en/function.mysql-query.php.

A mysql_query возвращает ресурс, который содержит результаты вашего запроса. Этот ресурс можно прочитать следующим образом:

$sql_result = mysql_query( [here your stuff] );
while ($row = mysql_fetch_assoc($sql_result)){
  echo $row['model']; // prints the model
}

Итак, вы должны просмотреть результат и пройти каждый row. row - это ассоциативный массив, содержащий отдельные поля.

Надеюсь, это поможет.

0 голосов
/ 18 мая 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...