2012-11-16 8 views
6

INSERTクエリと一緒にUUID()を挿入しようとしています。パラメータ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(); 

このクエリは、がライン51に...参照することにより、パラメータ2を渡すことはできませんこのエラーを返します。そしてそれはラインを指しています$stmt->bindParam(':uuid',"SELECT UUID()",PDO::PARAM_STR);

私はここで間違っていますか?この場合には、それをバインドする必要はありません

+0

[PHPエラー: "参照でパラメータ2を渡すことができません"](https://stackoverflow.com/questions/13105373/php-error-cannot-pass-parameter-2-参照によって) –

答えて

20

bindParamの第2引数は参照渡しであり、変数である必要があります。許可されていない値を直接渡しています。

UUID()を直接クエリに配置します。パラメータとしてバインドされていると、クエリに引用符付きの文字列として配置され、UUID値には評価されないためです。

1を直接クエリに配置することもできます。あるいは、変数をバインドしている間に変数に1を割り当て、その変数を2番目の引数として指定します。まず、その後、

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

:type_idをバインド..then。

+0

私がそれをしても、それは同じエラーを後退させます、私はev en 'SELECT UUID()'を '789EF1A1-0063-44D4-B300-84CDD8D875A5'に置き換えてください。 – fishcracker

+0

しかし、あなたは '$ stmt-> bindParam( ':uuid'、" SELECT UUID() "、PDO :: PARAM_STR)を削除しましたか? – Madbreaks

+0

そうでした。 '$ stmt-> bindParam( ':type_id'、1、PDO :: PARAM_INT);を残してください。 – fishcracker

0

ユーザー(users_uuid、TYPE_ID)VALUES INTOあなた INSERTは(UUIDを(SELECT)、1)

が有効なMySQLのクエリ

ではありません(UUIDを取得しようとする)を挿入あなたのユーザテーブルへの値