2012-11-16 89 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(),然后再插入值到你的用户表