You are here

drupal_write_record问题

hong 的头像
Submitted by hong on 星期一, 2009-08-03 01:34

今天在弄drupal里面的文件上传是遇到这个问题,至今不明白,还没答案!希望有人知道这个问题!

<strong>先举个例子,来说明这个问题的大概出发点:</strong>

首先,创建一个函数:
<code>
function insert_file()
{
    //这里就是执行插入的过程!   insert date here!
 
}
</code>
当我调用这个函数时候!如下:
<code>
    insert_file(); //调用上面的函数
</code>

结果查看数据表, 居然插入了不止一条的数据! 我就开始分析原因,在上面的函数开始出加上exit()
<code>
function insert_file()
{
    exit();
    //这里就是执行插入的过程!   insert date here!
 
}
</code>
<strong>exit(); </strong> 下面的函数就不会执行,数据库里面自然也不会插入数据了。 我于是就在改上面的函数,把exit()放在
<code>
function insert_file()
{

    //这里就是执行插入的过程!   insert date here!
      exit(); //放这里
}
</code>
运行后查看数据库,刚好添加了一条数据,正合我意!  <strong>把 exit()取消就是插入多条数据!</strong>

我说的就是drupal里面的 <strong>drupal_write_record</strong>函数!
 
我先在  template.php  文件里面调用 drupal_write_record 这个函数;传递的参数我用的是

<code>
function insert_s($arg)
    {
        $dest = 'admin';
        $fil = new stdClass();
        $fil->filename = 'new'.$arg.'.jpg';
        //$file->filepath = $_FILES['files']['tmp_name'][$source];
        $fil->filepath = 'sites/default/files/'.$arg.'.jpeg';
        //$file->filemime = file_get_mimetype($file->filename);
        $fil->filemime = 'image/jpeg';
        $fil->source = $source;
        //$file->destination = file_destination(file_create_path($dest .'/'. $file->filename), $replace);
        $fil->filesize = bcadd($arg,1);
        //
        $fil->filepath = $file->destination;
        $fil->uid = 1;
        $fil->status = 1;
        $fil->timestamp = time();
       
        //echo '<pre>';
        //print_r($fil);
        drupal_write_record('files',$fil);
        //echo '</pre>';
    }

insert_s('test');
</code>

就是上面的这个数据,为什么会这样,我到现在还不知道,希望有谁遇到过!

 <strong>我这样写是为了把多张有规律的图片直接 FTP 上传到服务器,而不用手动一张一张添加图片!</strong>
我是在page.tpl.php 里面还有template.php里面调用的,执行结果一样呀,数据库里面插入多条数据!

论坛:

g089h515r806 的头像

你的问题和 drupal_write_record('files',$fil)没有关系,关键点在于,调用insert_file()的函数被执行了多次,也就是说,insert_file()放在了一个循环中,使用exit()可以跳出这个循环。

Drupal中的模板文件就可以理解为一个主题函数,在这里,很有可能这个模板文件被循环调用了。即便是你不插入文件,这个模板文件在这里也可能会被循环调用。

所以你的问题的根源,不在于你给的这段代码,而在于更外层的代码,也就是说,和 drupal_write_record()这个函数没有关系。

上面是我的推断。

你说的我也测试了,

我测试了,不exit()的话,我肯定我的代码只执行一次!因为我echo 出的数据就是只有一次!  外面没有循环了!我推测是上面函数调用完了之后,后面的数据数据插入的记录!但是就是找不到原因,这个困惑我几天了!  一直没答案!  希望某高手帮忙呀!

怎么弄呀,给我说说,我现在对里层不是很熟悉! 谢谢。。。急切希望答案!

g089h515r806 的头像

安装一个debugger,这样的问题最好使用一个调试器,设置一个端点,一看就明白了,你的问题太具体了,在调试器里面,很方便就可以看到问题的所在。

你找找,找个好的开发工具和调试器。PHP有很多的。