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 - 检查提供的参数被格式成一个正则表达式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值