六、提交语句
通过调用connect()获取连接对象之后,就可以通过把语句字符串传递给对象的query()方法来提交sql语句了,如下所示:
$stmt = "some SQL statement";
$result =& $conn->query ($stmt);
$result =& $conn->query ($stmt);
返回值$result 有三种形式:
- 如果发生错误,DB::isError($result)将为true。这时,$result只能用来显示错误信息。
- 如果该字符串为诸如INSERT或者UPDATE之类的操纵数据而非返回结果集合的语句,则成功时$result的值为DB_OK。这时,我们可以通过调用$conn->affectedRows()来弄清该语句到底修改了多少行数据。
- 如果该字符串一个诸如SELECT之类的生成一个结果集合的语句,当该语句成功执行的时候$result为一个结果集合对象。这时,我们可以通过该对象确定结果集中的行数和列数,并能利用它来检索数据行。 当不再使用结果集的时候,可以通过调用$result->free()方法来销毁它。
为了演示各种不同类型的语句的处理方式,我们首先讨论如何创建和填充一个表,这需要用到CREATE TABLE和INSERT语句,这两个语句都不会返回结果集合。然后,使用SELECT生成一个结果集合。一般而言,各语句的处理顺序如下所示:
- 调用query()执行语句。
- 检查语句是否成功执行。
- 如果语句失败,则报告有关错误消息。
- 如果语句取得成功,就可以检索期待的信息了,例如内容的行数等。
七、提交不返回结果集合的语句
以下代码将提交一个语句,该语句将创建一个简单的表animal,这个表共两列,分别为动物的名称和类别:
$result =& $conn->query ("CREATE TABLE animal
(name CHAR(40), category CHAR(40))");
if (DB::isError ($result))
die ("CREATE TABLE failed: " . $result->getMessage () . "\n");
(name CHAR(40), category CHAR(40))");
if (DB::isError ($result))
die ("CREATE TABLE failed: " . $result->getMessage () . "\n");
建好数据表之后,就可以给它填充数据了。下面的示例代码调用query()方法来提交一个INSERT语句,该语句将向表animal中载入一个数据集:
$result =& $conn->query ("INSERT INTO animal (name, category)
VALUES
('snake', 'reptile'),
('frog', 'amphibian'),
('tuna', 'fish'),
('racoon', 'mammal')");
if (DB::isError ($result))
die ("INSERT failed: " . $result->getMessage () . "\n");
VALUES
('snake', 'reptile'),
('frog', 'amphibian'),
('tuna', 'fish'),
('racoon', 'mammal')");
if (DB::isError ($result))
die ("INSERT failed: " . $result->getMessage () . "\n");
为了弄清楚一条成功的数据操纵语句对多少记录产生了影响,可以使用连接对象的affectedRows()方法,如下所示:
printf ("Number of rows inserted: %d\n", $conn->affectedRows ());
对于前面的INSERT语句, affectedRows()返回的值为4。