基本示例
下面的查询语句用来检索给定商品的型号:
- $theProductId = 25;
- global $db ;
- $sql = "select products_model from " . TABLE_PRODUCTS . " where products_id = :productID:" ;
- $sql = $db ->bindVars( $sql , ':productID:' , $theProductId , 'integer' );
- $result = $db ->Execute( $sql );
- if ( $result ->RecordCount() > 0) {
- echo 'Model number = ' . $result ->fields[ 'products_model' ];
- } else {
- echo 'Sorry, no record found for product number ' . $theProductId ;
- }
理解基本示例
- global $db ;
这使得 $db 对象在你的代码内可用。($db 对象用来和数据库对话)。
- $sql = "select products_model from " . TABLE_PRODUCTS . " where products_id = :productID:" ;
这将指定你想运行的 SQL 查询语句。你可以参考结构表文档来确定特定的字段和表格,或者直接查看数据库结构。
TABLE_PRODUCTS 常量用于支持表格前缀,因为常量会按照位于 /includes/filenames.php 脚本的逻辑以及你的 /includes/configure.php 文件中的 DB_PREFIX 值,自动包含前缀。
注意::productID: 是一个占位符,它将由下一行代码处理:
- $sql = $db ->bindVars( $sql , ':productID:' , $theProductId , 'integer' );
这实质上占据了前一行(需要运行的查询语句) $sql 变量内容,并且把所有 :productID: 出现的地方用 $theProductID 的值代替,首先要确保 $theProductID 是一个整型的数值。(这是出于安全原因,这样没有人可以对你的脚本进行 SQL 注入)除了 integer 以外的其它 bindVars 数据类型在下面列出。
- $result = $db ->Execute( $sql );
这行运行了事实的查询,它的运行结果被保存在一个名为 $result 的数据库对象。
- if ( $result ->RecordCount() > 0) {
- <pre> echo 'Model number = ' . $result ->fields[ 'products_model' ];
- } else {
- echo 'Sorry, no record found for product number ' . $theProductId ;
- }
这将检查,从查询语句返回是否有超过0条记录。如果是,型号的编号将会在屏幕上打印。如果不是,将显示一条信息。
在多个记录中循环的例子
一个列出你数据库全部货币,同时带有现在配置汇率的简单例子:
- global $db ;
- $sql = "select title, code, value, last_updated from " . TABLE_CURRENCIES;
- $result = $db ->Execute( $sql );
- if ( $result ->RecordCount() > 0) {
- while (! $result ->EOF) {
- echo '<p>Currency name: ' . $result ->fields[ 'title' ];
- echo ', code: ' . $result ->fields[ 'code' ];
- echo ', Exchange Rate: ' . $result ->fields[ 'value' ];
- echo '</p>' ;
- $result ->MoveNext();
- }
- } else {
- echo '<p>Sorry, no currencies found.</p>' ;
- }
理解循环例子
- global $db ;
查看之前的描述。
- $sql = "select title, code, value, last_updated from " . TABLE_CURRENCIES;
将要被运行的 SQL 查询语句。解释见前面的例子。
注意:在这没有使用 bindVars(),因为这个查询语句不需要参数作为选择标准。
- $result = $db ->Execute( $sql );
执行查询语句 - 和之前的例子一样。
- if ( $result ->RecordCount() > 0) {
检查看我们是否有任何的结果。
- while (! $result ->EOF) {
这开始在从数据库中返回结果循环。
- echo '<p>Currency name: ' . $result ->fields[ 'title' ];
- echo ', code: ' . $result ->fields[ 'code' ];
- echo ', Exchange Rate: ' . $result ->fields[ 'value' ];
- echo '</p>' ;
这将简单把检索到的数据输出到屏幕。注意通过 $result->field['字段名'] 来引用各个字段。
- $result ->MoveNext();
- }
这告诉它跳到查询结果的下一个记录,然后回到循环和输出。。。重复一直到 while 条件符合 EOF(文件的结尾,查询结果的结尾)。
- } else {
- echo '<p>Sorry, no currencies found.</p>' ;
- }
如果 IF 语句失败,意味着没有返回结果,然后我们显示一条信息。
找出插入记录的编号
当你运行一条带有 INSERT 语句的查询的时候,你可以通过引用 $db->Insert_ID() 来找出你刚插入的新记录的编号,就像这样:
- global $db ;
- $sql = "insert into " . TABLE_SOMETHING . " (fieldname1, fieldname2) values (:value1:, :value2:)" ;
- $sql = $db ->bindVars( $sql , ':value1:' , $valueOne , 'integer' );
- $sql = $db ->bindVars( $sql , ':value2:' , $valueTwo , 'string' );
- $result = $db ->Execute( $sql );
- $newRecordId = $db ->Insert_ID();
- echo 'The new record added was number: ' . $newRecordId ;
bindVars 数据类型
bindVars() 参数可以使用以下的数据类型。实践中前四种使用最多。
- integer - 确保提供的数据是一个整型
- string - 确保提供的数据是一个字符串,同时给它加引号
- noquotestring - 确保提供的数据是一个字符串,但不添加引号
- float - 确保提供的数据是一个小数,同时确保一个空白的字符串被转换成0
- currency - 类似字符串
- date - 类似字符串
- enum - 和 MySql enum 类型类似:
- regexp - 检查提供的参数被格式成一个正则表达式