Drupal 6到Drupal 7查询转换会导致未定义的变量错误

时间:2015-06-07 22:53:50

标签: php drupal drupal-7

在未完全正确移植和测试的Drupal 7模块中将数据库查询从D6更新到D7时 - 以下是在第5行中留下undefinewd变量$ nid的查询示例 - 我有很多这些问题与查询留下未定义的变量错误现在因为D7查询不再返回关联数组 - 仅对象。关于如何修复???

是否有适当的标准编码示例

原始D6查询是:

 if (db_result(db_query("SELECT * FROM {uc_recurring_stripe} WHERE nid = %d", $item['nid']['#value']))) {   

我尝试将其更改为 - 位于 下面的第2行 - 但是在fetchAssoc

处生成了意外T运算符的解析错误
 if (isset($item['nid']['#value'])) {
 if (db_query('SELECT * FROM {the_table} WHERE nid = :nid', array(':nid' => $item['nid']['#value'])))->fetchAssoc();               
 $title = function_name($item['nid']['#value']);
 if (isset($title)) {
 $form['items'][$key]['desc']['#value'] = l($title, 'node/' . $nid);

我也尝试了

 if (db_query('SELECT * FROM {the_table} WHERE nid = :nid', array(':nid' => $item['nid']['#value']), array(':nid' => $nid))) {

此代码的任何迭代都会在$ form line(5)上面创建$ nid的未定义变量

来自drupal 7的“if”语句是否也是GONE,并且必须将所有查询重写为foreach循环?

我意识到这样的事情应该起作用

 $nid = 1;
 $result = db_query('SELECT n.nid, n.title, n.created FROM {the_table} n  WHERE n.nid = :nid', , array(':nid' => $item['nid']   ['#value']));
 // Result is returned as a iterable object that returns a stdClass object   on each iteration
 foreach ($result as $record) {
   // Perform operations on $record->title, etc. here.
   // in this example the available data would be mapped to object properties:
   // $record->nid, $record->title, $record->created
 }

但是。 。 。这个复杂现在是唯一的方法来从查询??

定义第5行的变量

1 个答案:

答案 0 :(得分:0)

问题是关于CODING STANDARD声明转换该查询的变量。这不是我原来的代码

我用过

     if (isset($item['nid']['#value'])) {
        $nid = [ ];
         $exists = db_query('SELECT 1 FROM {the_table} WHERE nid = :nid', array(':nid' => $item['nid']['#value']))->fetchField();
           if($exists)
            {
            if ($node = menu_get_object()) {
            // Get the nid
            $nid = $node->nid;
            $title = _function_name($item['nid']['#value']);

显然要声明变量并使其成为对象

            $nid = [ ];
            if ($node = menu_get_object()) {
            // Get the nid
            $nid = $node->nid;

答案没有回答关于编码标准的问题 - 我没有宣布KNEW $ nid - 问题是

是否有适当的标准编码示例如何修复???

我已经回答了我自己的问题,但它并没有告诉我这是否是一个正确的编码标准 - 我已经在https://www.drupal.org/node/310072阅读了链接页面并且它没有解决我提出的问题