Zen Cart 数据库抽象层

基本示例

下面的查询语句用来检索给定商品的型号:

 

  1. $theProductId  = 25;  
  2. global   $db ;  
  3. $sql  =  "select products_model from "  . TABLE_PRODUCTS .  " where products_id = :productID:" ;  
  4. $sql  =  $db ->bindVars( $sql':productID:'$theProductId'integer' );  
  5. $result  =  $db ->Execute( $sql );  
  6. if  ( $result ->RecordCount() > 0) {  
  7.   echo   'Model number = '  .  $result ->fields[ 'products_model' ];  
  8. else  {  
  9.   echo   'Sorry, no record found for product number '  .  $theProductId ;  
  10. }  

理解基本示例

 

  1. global   $db ;  

这使得 $db 对象在你的代码内可用。($db 对象用来和数据库对话)。

 

  1. $sql  =  "select products_model from "  . TABLE_PRODUCTS .  " where products_id = :productID:" ;  

这将指定你想运行的 SQL 查询语句。你可以参考结构表文档来确定特定的字段和表格,或者直接查看数据库结构。

TABLE_PRODUCTS 常量用于支持表格前缀,因为常量会按照位于 /includes/filenames.php 脚本的逻辑以及你的 /includes/configure.php 文件中的 DB_PREFIX 值,自动包含前缀。

注意::productID: 是一个占位符,它将由下一行代码处理:

 

  1. $sql  =  $db ->bindVars( $sql':productID:'$theProductId'integer' );  

这实质上占据了前一行(需要运行的查询语句) $sql 变量内容,并且把所有 :productID: 出现的地方用 $theProductID 的值代替,首先要确保 $theProductID 是一个整型的数值。(这是出于安全原因,这样没有人可以对你的脚本进行 SQL 注入)除了 integer 以外的其它 bindVars 数据类型在下面列出。

 

  1. $result  =  $db ->Execute( $sql );  

这行运行了事实的查询,它的运行结果被保存在一个名为 $result 的数据库对象。

 

  1. if  ( $result ->RecordCount() > 0) {  
  2. <pre>  echo   'Model number = '  .  $result ->fields[ 'products_model' ];  
  3. else  {  
  4.   echo   'Sorry, no record found for product number '  .  $theProductId ;  
  5. }  

这将检查,从查询语句返回是否有超过0条记录。如果是,型号的编号将会在屏幕上打印。如果不是,将显示一条信息。

在多个记录中循环的例子

一个列出你数据库全部货币,同时带有现在配置汇率的简单例子:

 

  1. global   $db ;  
  2. $sql  =  "select title, code, value, last_updated from "  . TABLE_CURRENCIES;  
  3. $result  =  $db ->Execute( $sql );  
  4. if  ( $result ->RecordCount() > 0) {  
  5.   while  (! $result ->EOF) {  
  6.     echo   '<p>Currency name: '  .  $result ->fields[ 'title' ];  
  7.     echo   ', code: '  .  $result ->fields[ 'code' ];  
  8.     echo   ', Exchange Rate: '  .  $result ->fields[ 'value' ];  
  9.     echo   '</p>' ;  
  10.     $result ->MoveNext();  
  11.   }  
  12. else  {  
  13.   echo   '<p>Sorry, no currencies found.</p>' ;  
  14. }  

理解循环例子

 

  1. global   $db ;  

查看之前的描述。

 

  1. $sql  =  "select title, code, value, last_updated from "  . TABLE_CURRENCIES;  

将要被运行的 SQL 查询语句。解释见前面的例子。

注意:在这没有使用 bindVars(),因为这个查询语句不需要参数作为选择标准。

 

  1. $result  =  $db ->Execute( $sql );  

执行查询语句 - 和之前的例子一样。

 

  1. if  ( $result ->RecordCount() > 0) {  

检查看我们是否有任何的结果。

 

  1. while  (! $result ->EOF) {  

这开始在从数据库中返回结果循环。

 

  1. echo   '<p>Currency name: '  .  $result ->fields[ 'title' ];  
  2.    echo   ', code: '  .  $result ->fields[ 'code' ];  
  3.    echo   ', Exchange Rate: '  .  $result ->fields[ 'value' ];  
  4.    echo   '</p>' ;  

这将简单把检索到的数据输出到屏幕。注意通过 $result->field['字段名'] 来引用各个字段。

 

  1. $result ->MoveNext();  
  2. }  

这告诉它跳到查询结果的下一个记录,然后回到循环和输出。。。重复一直到 while 条件符合 EOF(文件的结尾,查询结果的结尾)。

 

  1. else  {  
  2.     echo   '<p>Sorry, no currencies found.</p>' ;  
  3. }  

如果 IF 语句失败,意味着没有返回结果,然后我们显示一条信息。

找出插入记录的编号

当你运行一条带有 INSERT 语句的查询的时候,你可以通过引用 $db->Insert_ID() 来找出你刚插入的新记录的编号,就像这样:

 

  1. global   $db ;  
  2. $sql  =  "insert into "  . TABLE_SOMETHING .  " (fieldname1, fieldname2) values (:value1:, :value2:)" ;  
  3. $sql  =  $db ->bindVars( $sql':value1:'$valueOne'integer' );  
  4. $sql  =  $db ->bindVars( $sql':value2:'$valueTwo'string' );  
  5. $result  =  $db ->Execute( $sql );  
  6. $newRecordId  =  $db ->Insert_ID();  
  7. echo   'The new record added was number: '  .  $newRecordId ;  

bindVars 数据类型

bindVars() 参数可以使用以下的数据类型。实践中前四种使用最多。

  • integer - 确保提供的数据是一个整型
  • string - 确保提供的数据是一个字符串,同时给它加引号
  • noquotestring - 确保提供的数据是一个字符串,但不添加引号
  • float - 确保提供的数据是一个小数,同时确保一个空白的字符串被转换成0
  • currency - 类似字符串
  • date - 类似字符串
  • enum - 和 MySql enum 类型类似:
  • regexp - 检查提供的参数被格式成一个正则表达式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值