2014-03-06 37 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