我正在尝试将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);
我在这里做错了什么?
答案 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();
}