无法通过引用传递参数2 - uuid PDO

时间:2012-11-16 00:01:17

标签: php mysql pdo

我正在尝试将UUID()INSERT查询一起插入。

$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);

我在这里做错了什么?

4 个答案:

答案 0 :(得分:24)

bindParam的第二个参数是通过引用传递的,应该是一个变量。您正在直接传递不允许的值。

UUID()直接放在查询中,因为如果它被绑定为参数,它将作为带引号的字符串放在查询中,并且不会被计算为UUID值。

您也可以将1直接放入查询中。或者将1分配给变量,并在绑定参数:type_id时将该变量作为第二个参数。

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

答案 1 :(得分:2)

在这种情况下无需绑定它,只需将其包含在您的查询中:

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

..然后按原样绑定:type_id

答案 2 :(得分:0)

您     INSERT INTO用户(users_uuid,type_id)VALUES(SELECT UUID(),1)

不是有效的mysql查询

首先尝试获取uuid(),然后将值插入users表

答案 3 :(得分:0)

如果要传递值,请使用以下方法:

$type_id = 1;
$stmt->bindValue(':type_id', $type_id, PDO::PARAM_INT);

如果要绑定参数(在其中传递对变量的引用),请执行以下操作:

$stmt->bindParam(':type_id', $type_id, PDO::PARAM_INT);

// now you can update $type_id, since it is a reference, and execute multiple times:
foreach($id as $i){
    $type_id = $i;
    $stmt->execute();
}