[英]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.