簡體   English   中英

PHP MYSQL SELECT返回NULL

[英]PHP MYSQL SELECT Returns NULL

我執行以下代碼,在臨時表中將company_id創建為UUID_SHORT。

然后,將使用該company_id將記錄插入以UUID作為主鍵的多個表中。 我的問題是,當我嘗試在我的代碼中檢索為$ company_id的company_id時,它為null。 但是,如果我使用json_encode($ tempResult),則company_id值在那里。 我究竟做錯了什么?

非常感謝您的幫助,謝謝!

    try {
        $conn = new PDO("mysql:host=localhost;dbname=$dbname", $db->id, $db->pass); //connect to db
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    //error modes    

        $temp = $conn->prepare('CREATE TEMPORARY TABLE tempId (user_id VARCHAR(17) PRIMARY KEY, company_id VARCHAR(17))');
        $temp->execute();
        $temp = $conn->prepare('INSERT INTO tempId(user_id, company_id) VALUES(:user_id, UUID_SHORT())');
        $temp->bindParam(':user_id', $_SESSION['username'], PDO::PARAM_INT);
        $temp->execute(); 
        $temp = $conn->prepare('SELECT company_id FROM tempId WHERE user_id = :user_id ');
        $temp->bindParam(':user_id', $_SESSION['username'], PDO::PARAM_INT);
        $temp->execute(); 
        $tempResult= $temp->fetchAll(PDO::FETCH_ASSOC); 
        $company_id = $tempResult->company_id;


    // $result[1] =$_SESSION('username');
    } catch(PDOException $e) {

        $result = $e->getMessage();
    }
    print json_encode($company_id);

這里:

$tempResult= $temp->fetchAll(PDO::FETCH_ASSOC);

如果fetchAll成功,則$tempResult將是一個數組。 為了進行調試,我們可以使用方便的var_dump進行驗證,例如

var_dump($tempResult);

如果$tempResult是一個數組,我想知道這個表達式:

$tempResult->company_id

那會返回什么? 您期望什么返回? 為什么?


編輯:我比回答一個問題或三個問題更好。

但是,我不能(出於良心)使自己對OP代碼的問題給出“答案” ...

至少沒有( 比喻地 )不停地想知道代碼中使用的實際SQL。

臨時表的目的是什么? 為什么要插入它? 為什么將UNSIGNED BIGINT數據類型(由UUID_SHORT()函數返回)轉換為VARCHAR(17)? 當函數返回18或19個十進制數字時,我們是否有某些原因想要舍棄1或2位數字?

如果此代碼塊的目的是從MySQL UUID_SHORT()函數返回一個值,則我不明白為什么我們需要多個語句。 顯然,我缺少一些東西,為什么這還不夠:

try {
    $conn = new PDO("mysql:host=localhost;dbname=$dbname", $db->id, $db->pass);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sth = $conn->prepare('SELECT UUID_SHORT() AS company_id');
    $sth->execute();
    $company_id = $sth->fetchColumn();
} catch(PDOException $e) {
    //var_dump($e->getMessage);
} finally {
    if(isset($sth)){ $sth->close(); }
    if(isset($conn)){ $conn->close(); }
}

(應用程序不會像這樣攪動數據庫連接;要么有一個連接池,要么將連接傳遞給該例程。)

不確定,但是只要fetchAll返回數組,您的代碼就會:

 $company_id = $tempResult->company_id;

無效,您應該:

 $company_id = $tempResult[0]['company_id'];

要么

 $tempResult= $temp->fetch(PDO::FETCH_ASSOC); 
 $company_id = $tempResult['company_id'];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM