使用php post变量构造查询

时间:2013-10-15 02:28:35

标签: php mysql sql

我有一个包含用户信息的数据库表:名称,电子邮件和他们承诺捐赠的项目。我想在网页上显示他们拥有的项目,所以我构建了这个查询:

$email  = (isset($_POST['email'])) ? $_POST['email'] : '';

$i = "SELECT required_items.name
      FROM required_items LEFT JOIN donations ON donations.item_id=required_items.id 
      WHERE donations.email = '" .$email. "' ";

$ir = $db->query($i);
$rows = $ir->fetchAll();

foreach($rows as $data){
$item_name = $data['name'];
}

然后我显示信息时:

<tr>
   <td><label>Item</label></td>
   <td><input type="text" name="name" value="<?php echo $item_name; ?>"></td>
</tr>

当我运行查询并替换“。$ email”时。使用电子邮件地址,查询工作正常,我能够在phpmyadmin中看到他们的捐款,但截至目前,在代码中使用此变量我只得到一些只是说Array的内容。

如何显示正确的信息?我最终希望通过电子邮件将其发送给用户,这样会非常有帮助。

编辑:我已经应用了STLMikey提供的建议,现在$ item_name显示“NULL”。

1 个答案:

答案 0 :(得分:1)

您的代码非常容易受到SQL注入攻击的影响。您需要重新评估该SQL。(http://en.wikipedia.org/wiki/SQL_injection

要实际回答您的问题,您的名为$item_name的变量是查询返回的所有行的集合。你需要遍历它以从每一行中提取所需的名称......如下所示:

$rows = $ir->fetchAll();
foreach($rows as $data){
    $item_name = $data['name'];
}

如果您无法弄清楚为什么某些内容正在打印Array()到屏幕上,请尝试在变量上调用print_r($var)来查看其内容。这将打印数组的内容,以便您可以看到内部。