【问题标题】:mysqli_query return object not resourcemysqli_query 返回对象而不是资源
【发布时间】:2014-11-28 17:51:00
【问题描述】:

如果有人无法提示我如何使用 mysqli_query 而不是对象返回资源,我将不胜感激,因为每当我将它与 mysqli_field_name 或 mysql_fetch_row 一起使用时,它都会返回此错误“mysql_field_name() 期望参数 1 是资源,给定对象”。请注意,您对 mysqli 方法并不十分熟悉。将获得一些帮助。下面是我的代码以获取全部详细信息。

<?php
    $dns="mysql:dbname=name";
    $username="name";
    $password="";



    $con = new mysqli('localhost', 'root', '', 'oysg');


    $export=mysqli_query($con,"SELECT * FROM applicant");
    $header = '';
    $data ='';
    // $export = $stmt;

    // extract the field names for header 
    $fields = 25;

    for ( $i = 0; $i < $fields; $i++ )
    {
        $header .= mysql_field_name( $export , $i ) . "\t";
        echo $header;
    }
    echo '<br>';
    echo '<br>';
    // foreach ( $fields2 as $headers )
    // {
    //     $header .=  $headers. "\t";
    //     echo $header;
    // }

    // export data 
    while( $row = mysql_fetch_row( $export ) )
    {
        $line = '';
        foreach( $row as $value )
        {                                            
            if ( ( !isset( $value ) ) || ( $value == "" ) )
            {
                $value = "\t";
            }
            else
            {
                $value = str_replace( '"' , '""' , $value );
                $value = '"' . $value . '"' . "\t";
            }
            $line .= $value;
        }
        $data .= trim( $line ) . "\n";
    }

    $data = str_replace( "\r" , "" , $data );

    if ( $data == "" )
    {
        $data = "\nNo Record(s) Found!\n";                        
    }

    // allow exported file to download forcefully
    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=export.xml");
    header("Pragma: no-cache");
    header("Expires: 0");
    print "$header\n$data";
    ?> 

提前致谢

【问题讨论】:

  • 您是否混淆了mysqli_*mysql_* 扩展名?或者这是一个错字?

标签: php mysqli


【解决方案1】:

您正在混合 OOP 和程序。

您在编写时使用的是 OOP:

$con = new mysqli('localhost', 'root', '', 'oysg');

$con 现在是具有成员属性和方法的mysqli 实例。

但是,使用如下语法:

$export=mysqli_query($con,"SELECT * FROM applicant")

不是面向对象的做事方式。使用任何mysqli_* 函数意味着您的$con 是以下结果:

$con = mysqli_connect('localhost', 'root', '', 'oysg');

如果您想坚持使用 OOP,我相信您正在使用以下 mysqli_query 等效项:

$export = $con->query("SELECT * FROM applicant");

$export 现在是an instance of mysqli_result

使用 OOP 样式也应该有助于您的扩展混合和匹配,例如mysqli_querymysql_fetch_name,后者在 mysqli 中缺少 i

【讨论】:

  • 我已经进行了更改,但仍然得到 mysql_field_name() 期望参数 1 是资源,给定对象。我真正想要做的是将我的数据库导出到 excel。所以我需要使用 mysql_field_name ()返回字段名称,但它说一个对象被它而不是资源。我该怎么做呢
  • @AlofeOluwafemi 如果您已更改使用 OOP,但您仍在使用 mysql_field_name,则说明您没有进行足够的更改。假设$exportmysqli_result 的一个实例,那么:$export-&gt;fetch_field_direct($i) 而不是mysql_field_nameThis is apparent in the documentation of mysql_field_name.
  • acyually 已经使用了 $export->fetch_field()->name.but 我如何使用 mysqli 类执行类似 mysql_fetch_row( $export ) 的操作。谢谢
  • 刚刚做了这个 mysqli_fetch_row( $export )。它起作用了。我真的很感谢你的帮助。
猜你喜欢
  • 2016-02-16
  • 2013-08-23
  • 1970-01-01
  • 2015-07-10
  • 2019-11-01
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多