9

我正在尝试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();

此查询返回此错误Cannot pass parameter 2 by reference ... 在第 51 行。它指向这条线$stmt->bindParam(':uuid',"SELECT UUID()",PDO::PARAM_STR);

我在这里做错了什么?

4

4 回答 4

30

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

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

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

$type_id = 1;
$stmt->bindParam(':type_id', $type_id, PDO::PARAM_INT);
于 2012-11-16T00:12:41.430 回答
2

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

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

:type_id..然后像你​​一样绑定。

于 2012-11-16T00:07:37.830 回答
0

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

不是有效的 mysql 查询

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

于 2012-11-16T00:21:20.540 回答
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();
}
于 2020-01-02T21:24:12.730 回答