我有:
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'SELECT * FROM prekes WHERE pirkejo_id=' . $pirkejas . '';
$q = $pdo->prepare($sql);
foreach ($pdo->query($sql) as $row) {
if ($row['prek_pav'] != '') {
echo '<tr>';
echo '<td>' . $row['prek_pav'] . '</td>';
echo '<td >' . $row['prek_kaina'] . '</td>';
echo '</tr>';
}
我不知道如何获得$row[i]['prek_pav']
。在我看来,我应该将foreach
循环更改为for
,但不知道如何。
编辑:
我想实现:
<tr>
<td><input class="input-medium" name="prekes[1][pavadinimas]" type="text" placeholder="Prekė" value="<?php $row['prek_pav'] ?>"></td>
<td><input class="input-medium" name="prekes[1][kaina]" type="text" placeholder="Kaina" value="<?php $row['prek_kaina'] ?>"></td>
</tr>
并在mysql中的prekes表中更新我的记录。
答案 0 :(得分:3)
您正在以错误的方式使用PDO。使用参数化查询而不是自己将动态值替换为查询。如果您盲目地将用户输入插入到数据库查询中,那么您的查询将容易受到SQL注入攻击,这意味着具有恶意意图的用户可能会损坏您的数据。
这是正确的方法:
// prepare the statement -- the place holders allow PDO to handle substituting
// the values, which also prevents SQL injection
$stmt = $pdo->prepare('SELECT * FROM prekes WHERE pirkejo_id=:pirkejas');
// bind the parameters
$stmt->bindValue(':pirkejas', $pirkejas);
// if statement executed successfully, print the results
if ($stmt->execute()) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
if (!empty($row['prek_pav'])) {
echo '<tr>';
echo '<td>' . $row['prek_pav'] . '</td>';
echo '<td >' . $row['prek_kaina'] . '</td>';
echo '</tr>';
}
}
}
请注意在上面的PDO::FETCH_ASSOC
方法调用中使用fetch()
。这告诉PDO将行作为关联数组返回,并将字段名称作为键。
答案 1 :(得分:0)
你可以通过这种方式使用foreach
$i=0;
foreach ($pdo->query($sql) as $row) {
if ($row[$i]['prek_pav'] != '') {
echo '<tr>';
echo '<td>' . $row[$i]['prek_pav'] . '</td>';
echo '<td >' . $row[$i]['prek_kaina'] . '</td>';
echo '</tr>';
}
$i++;
}