2012-11-16 127 views
6

我試圖將UUID()與我的INSERT查詢一起插入。無法通過參考傳遞參數2 - uuid PDO

$handle->beginTransaction(); 
// Define query 
$query = "INSERT INTO users (users_uuid, type_id) VALUES (:uuid, :type_id)"; 
// Prepare statement 
$stmt = $handle->prepare($query); 
// Bind parameters 
$stmt->bindParam(':uuid',"SELECT UUID()",PDO::PARAM_STR); 
$stmt->bindParam(':type_id',1,PDO::PARAM_INT); 
// Execute query 
$stmt->execute(); 
$handle->commit(); 

該查詢返回該錯誤不能按引用傳遞參數2 ......上線51。它指向線$stmt->bindParam(':uuid',"SELECT UUID()",PDO::PARAM_STR);

我在這裏做錯了什麼?

+0

可能重複的[PHP錯誤:「無法通過引用傳遞參數2」](https://stackoverflow.com/questions/13105373/php-error-cannot-pass-parameter-2-通過引用) –

回答

20

bindParam的第二個參數通過引用傳遞,應該是一個變量。你直接傳遞不允許的值。

廣場UUID()直接查詢,因爲如果它被綁定爲參數,將它放置在查詢中引用字符串並不會被計算爲一個UUID值。

您也可以直接在查詢中放置1。或將1分配給變量,並在綁定參數:type_id時將該變量作爲第二個參數。

$type_id = 1; 
$stmt->bindParam(':type_id', $type_id, PDO::PARAM_INT); 
+0

等待我迷路了,請原諒我的技術條件不足。但是,你能在代碼中展示你的意思嗎? – fishcracker

+0

它現在可以工作,正如你所建議的那樣,但是我從'var_dump($ stmt-> execute())''返回一個'NULL'返回值' – fishcracker

+0

嘗試執行'var_dump($ stmt-> errorInfo());'檢查錯誤消息。 – air4x

2

沒有必要綁定它在這種情況下,簡單地將其包括在您的查詢:

$query = "INSERT INTO users (users_uuid, type_id) VALUES (UUID(), :type_id)"; 

..then結合:type_id因爲你已經是。

+0

即使我這樣做仍然會回到同樣的錯誤,我ev用'789EF1A1-0063-44D4-B300-84CDD8D875A5'替換'SELECT UUID()'作爲字符串,但沒有運氣。 – fishcracker

+0

但是你刪除了'$ stmt-> bindParam(':uuid',「SELECT UUID()」,PDO :: PARAM_STR);'? – Madbreaks

+0

是的,我做到了。離開'$ stmt-> bindParam(':type_id',1,PDO :: PARAM_INT);'唯一一個離開。 – fishcracker

0

您 INSERT INTO用戶(users_uuid,TYPE_ID)VALUES(SELECT UUID(),1)

不是一個有效的MySQL查詢

試圖讓UUID(),然後再插入值到你的用戶表