繁体   English   中英

mysqli类的对象无法在第5行中转换为字符串[重复]

[英]Object of class mysqli could not be converted to string in line 5 [duplicate]

这个问题已经在这里有了答案:

我试图寻找与相同问题有关的问题,但无法获得适合我代码的解决方案。

我不断收到错误:

mysqli类的对象无法在第5行中转换为字符串

码:

<?php

    function aggiornamento($utente) {
        global $conn;   
        global $_CONFIG;

        $selezione = mysqli_query ($conn, "SELECT * FROM ".$_CONFIG['db_account'].".account WHERE login = '".$utente."' LIMIT 1");

        while ($account = mysqli_fetch_array($selezione)) {
            $_SESSION['IShop_Login']= $account['login'];
            $_SESSION['IShop_DR'] = $account['dr'];
            $_SESSION['IShop_DB'] = $account['db'];
            $_SESSION['IShop_AID'] =   $account['id'];
            $_SESSION['IShop_Admin'] = $account['Admin_IShop'];
        }
    }

?>

我从已经提出的问题中尝试了一些解决方案,但无济于事。 因此,我恳请您为我更正我的代码,并可能对正在发生的事情稍作解释,以便我学习。

我的$conn

$conn = mysql_connect($_CONFIG['host'], $_CONFIG['user'], $_CONFIG['pass']);

$_CONFIG['host'], $_CONFIG['user'], $_CONFIG['pass']定义为:

$_CONFIG['host'] = "SERVER IP";
$_CONFIG['user'] = "root";
$_CONFIG['pass'] = "PW";

最重要的是, $_CONFIG['db_account'] = "account"; 但是我坚信问题不在于我的$conn ,我可能是错的。

您应该注意一些问题

  1. 尽量避免在函数内部使用全局变量。 在任何应用程序中这都可能是危险的,因为您可能不希望更改它们。
  2. 注意SQL注入。 您可以考虑开始使用准备好的语句来避免这种情况。
  3. 您将结果限制为1,但仍使用循环来获取结果
  4. 您正在使用mysqli函数,但使用mysql_connect完成mysql_connect
  5. 创建连接时,您没有选择要使用的任何数据库

连接应该使用mysqli_connect完成:

$mysql = mysqli_connect($host, $user, $password, $databaseName);

我不知道这有帮助吗?

General `mysqli` connection:
----------------------------

   $host    =   'localhost';
   $uname   =   'root'; 
   $pwd     =   'xxx'; 
   $db      =   'xxx';

   $conn=new mysqli( $host, $uname, $pwd, $db );


function aggiornamento( $utente=false ){
    global $conn;
    global $_CONFIG;

    if( !isset( $utente ) or empty( $utente ) ) return false;

    $sql="select `login`,`dr`,`db`,`id`,`admin_ishop` from `{$_CONFIG['db_account']}`.`account` where `login`=? limit 1;";

    $stmt=$conn->prepare( $sql );
    $stmt->bind_param( 's', $param );
    $param=$utente;

    $result=$stmt->execute();
    $stmt->bind_result( $login, $dr, $db, $id, $admin_ishop );
    $stmt->fetch();

    if( $result ){

        $_SESSION['IShop_Login']    = $login;
        $_SESSION['IShop_DR']       = $dr;
        $_SESSION['IShop_DB']       = $db;
        $_SESSION['IShop_AID']      = $id;
        $_SESSION['IShop_Admin']    = $admin_ishop;

        $stmt->close();
        return true;
    }
    $conn->close();
    return false;
}

测试

<?php

    include __DIR__.'\conn.php';
    /*
        Where conn.php is simply:
        -------------------------

        <?php
        $host   =   'localhost';
        $uname  =   'root'; 
        $pwd    =   'xxx'; 
        $db     =   'so_experiments';

        $conn   =   new mysqli( $host, $uname, $pwd, $db );
        ?>
    */

    /* Defined so as not to break sql stmt */
    $_CONFIG['db_account']='so_experiments';


    function aggiornamento( $utente=false ){
        global $conn;
        global $_CONFIG;

        if( !isset( $utente ) or empty( $utente ) ) return false;

        $sql="select `login`,`dr`,`db`,`id`,`admin_ishop` from `{$_CONFIG['db_account']}`.`account` where `login`=? limit 1;";

        $stmt=$conn->prepare( $sql );
        $stmt->bind_param( 's', $param );
        $param=$utente;

        $result=$stmt->execute();
        $stmt->bind_result( $login, $dr, $db, $id, $admin_ishop );
        $stmt->fetch();

        if( $result ){

            $_SESSION['IShop_Login']    = $login;
            $_SESSION['IShop_DR']       = $dr;
            $_SESSION['IShop_DB']       = $db;
            $_SESSION['IShop_AID']      = $id;
            $_SESSION['IShop_Admin']    = $admin_ishop;

            /* only for demo debug */
            echo 'login:', $login,', db:', $db,', dr:', $dr,', id:', $id,', admin_ishop:', $admin_ishop;

            $stmt->close();
            return true;
        }
        $conn->close();
        return false;
    }

    /* call the function with a value for `$utente` = 'default' */
    call_user_func( 'aggiornamento', 'default' );

    /* 
        outputs: 
        login:default, db:store, dr:43, id:1, admin_ishop:1
    */
?>

您正在使用mysqli_query但使用mysql_connect ,因此使用mysqli_connect()

您正在混合使用mysql和mysqli-functions,这已知会失败。

尝试将mysql_connect替换为mysqli_connect ,但请注意,它可能需要其他/附加参数。

另外,您应该重新考虑全局变量的用法。

尝试这个

<?php
function aggiornamento($utente){
global $conn;   
global $_CONFIG;
       $selezione = mysqli_query ($conn, "SELECT * FROM ".$_CONFIG['db_account'].".account WHERE login = '".$utente."' LIMIT 1");
       while ($row = $selezione->fetch_assoc())
       {
$_SESSION['IShop_Login']= $row['login'];
$_SESSION['IShop_DR'] = $row['dr'];
$_SESSION['IShop_DB'] = $row['db'];
$_SESSION['IShop_AID'] =   $row['id'];
$_SESSION['IShop_Admin'] = $row['Admin_IShop'];
       }
}
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM