2014-03-06 38 views
3

我在這裏找到了一些信息,但可以發表評論以詢問更多信息。所以我的問題是: 我想從mySQL中選擇我的數據。 我有兩個表: 客戶(ID,姓名,AK,numeris) prekes(ID,CUSTOMER_ID,prek_name,prek_value)使用PDO類將MySql表數據選擇到數組中?

ID兩個表中自動遞增。

我嘗試填充數組?

我只有一個值傳遞(customers.id)。有5個記錄與prekes.customer_id相同。

$pdo = Database::connect(); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$sql = 'SELECT * FROM prekes WHERE customer_id=' . $pirkejas . ''; //$pirkejas = id passed via $_POST. 
$q = $pdo->prepare($sql); 
foreach ($pdo->query($sql) as $row) { 
    //  if ($row['prek_pav'] != '') { 
    $prekes = array($row['prek_name'], $row['prek_value']); 

    Database::disconnect(); 

如何以正確的方式填充數組$ prekes?

編輯:

我想在我的表格打印值:

<table class="table-bordered"> 
<tr> 
<td><input class="input-medium" name="prekes[1][pavadinimas]" type="text" placeholder="Prekė" value=""></td> 
<td><input class="input-medium" name="prekes[1][kaina]" type="text" placeholder="Kaina" value=""></td> 
</tr> 
<tr> 
<td><input class="input-medium" name="prekes[2][pavadinimas]" type="text" placeholder="Prekė" value=""></td> 
<td><input class="input-medium" name="prekes[2][kaina]" type="text" placeholder="Kaina" value=""></td> 
</tr> 
<tr> 
<td><input class="input-medium" name="prekes[3][pavadinimas]" type="text" placeholder="Prekė" value=""></td> 
<td><input class="input-medium" name="prekes[3][kaina]" type="text" placeholder="Kaina" value=""></td> 
</tr> 
<tr> 
<td><input class="input-medium" name="prekes[4][pavadinimas]" type="text" placeholder="Prekė" value=""></td> 

我我的行動做:

$pdo = Database::connect(); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $sql = "INSERT INTO customers (name,pavarde,ak,data, numeris) values(?, ?, ?, ?,?)"; 
    $q = $pdo->prepare($sql); 
    $q->execute(array($name, $pavarde, $ak, date("Y-m-d H:i:s", time()), $numeris)); 

    $pirkejo_id = $pdo->lastInsertId(); 

    foreach ($prekes as $preke) { 
     //prekiu uzpildymas 
     $sql = "INSERT INTO prekes (customer_id,prek_name,prek_value) values(?, ?, ?)"; 
     $q = $pdo->prepare($sql); 
     $q->execute(array($pirkejo_id, $preke['pavadinimas'], $preke['kaina'])); 
    } 

    Database::disconnect(); 
    header("Location: default.php"); 

我不知道如何從數據庫中獲取所有值,

+0

取決於您認爲是「正確的方式」。你想讓數組看起來像完全一樣? – Tularis

+0

我更新了我的問題。我讓這個數組在輸入forn中設置值來編輯它們並重新放到數據庫中。 – pvaitonis

回答

2

不要將值注入到SQL查詢中。改用參數綁定。

$q = $pdo->prepare('SELECT id, prek_name, prek_value FROM prekes WHERE customer_id = ?'); 
$q->execute([$pirkejas]); // if PHP < 5.4, use array($pirkejas) 
$prekes = $q->fetchAll(PDO::FETCH_ASSOC); 

現在$prekes將是一個行數組,其中每行是一個關聯數組。

<?php foreach ($prekes as $row) : ?> 
<tr> 
    <td> 
     <input name="prekes[<?= (int) $row['id'] ?>][pavadinimas]" 
       value="<?= htmlspecialchars($row['prek_name']) ?>"> 
    </td> 
    <td> 
     <input name="prekes[<?= (int) $row['id'] ?>][kaina]" 
       value="<?= htmlspecialchars($row['prek_value']) ?>"> 
    </td> 
</tr> 
<?php endforeach ?> 
+0

他的報價怎麼亂了?他有一個不必要的'。 '''最後,但他們沒有傷害任何東西。 – Barmar

+0

@Barmar刪除了該筆記。我看到兩個單引號,我認爲SQL轉義:) – Phil

1

PDO有一個方法可以爲您做到這一點。另外,您不應將變量直接替換爲查詢,您應該使用參數。

$q = $pdo->prepare('SELECT * FROM prekes WHERE customer_id= :id'); 
$q->execute(array(':id' => $pirkejas)); 
$prekes = $q->fetchAll(); 
+0

http://php.net/PDOStatement.execute#refsect1-pdostatement.execute-returnvalues – Phil

+0

修復了它 - 在PDO和mysqli之間混淆很容易。 – Barmar

+0

我認爲他的意思是你沒有檢查執行的返回值,以查看查詢是否失敗。 if($ q && $ q-> execute())$ prekes = $ q-> fetchAll(); – Rahly