数据库资讯

为什么你应该使用PHP PDO访问数据库

您可以通过在您的SQL语句中包含占位符来使用 prepared statement . 这里有三个例子: 一个没有占位符的, 一个有未命名占位符(Unnamed Placeholders)的, 和一个有命名占位符(Named Placeholders)的.

# no placeholders - ripe for SQL Injection!
 $STH = $DBH->("INSERT INTO folks (name, addr, city) values ($name, $addr, $city)");
# unnamed placeholders
   $STH = $DBH->("INSERT INTO folks (name, addr, city) values (?, ?, ?);
# named placeholders
   $STH = $DBH->("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");

您可能想避免使用第一种方法; 下面为您提供了它们直接的比较. 选择未命名占位符或命名占位符将会影响您如何为这些语句设置数据.

未命名占位符(Unnamed Placeholders)

# assign variables to each place holder, indexed 1-3
   $STH->bindParam(1, $name);
   $STH->bindParam(2, $addr);
   $STH->bindParam(3, $city);
# insert one row
   $name = "Daniel"
   $addr = "1 Wicked Way";
   $city = "Arlington Heights";
   $STH->execute();
# insert another row with different values
   $name = "Steve"
   $addr = "5 Circle Drive";
   $city = "Schaumburg";
   $STH->execute();

只需两步!首先,我们为不同的占位符(Placeholder)绑定变量 (lines 2-4). 然后,我们为那些占位符(Placeholder)赋值然后执行查询. 要想发送另外的一组数据,只需要改变那些变量的值,然后再执行即可.

(译注: 原文在第一步与第二布均使用了assign来描述过程)

这个使用很多参数的方法似乎有点麻烦?如果您的数据存储在数组中,有一个简单的方法:

# the data we want to insert
 $data = array('Cathy', '9 Dark and Twisty Road', 'Cardiff');
$STH = $DBH->("INSERT INTO folks (name, addr, city) values (?, ?, ?);
   $STH->execute($data);

这很简单,不是吗?

在数组中的数据等同于占位符。 $data[0]对应第一个占位符,$data[1]第二个,依此类推,但如果您的数组索引并未排序,这将无法正常工作,您将需要重新索引这个数组.

命名占位符(Named Placeholders)

希望看到您的想法,请您发表评论x