2016-10-19 6 views
0

私は作業として検証された次のSQL文を持っている:このPHPベースのSQL文の正しい構文は何ですか?

INSERT INTO community_players (community_id, player_id) 
SELECT communities.id, users.id 
FROM communities INNER JOIN users ON communities.admin = users.user_email 
WHERE users.user_email = '[email protected]' 
AND communities.code = 'HX99f9' 

私は今、以下のPHP関数内の変数をダミーメールや地域コードデータを交換し、それをデータベースに提出します。

これは私の関数である:

public function insertNewAdminIntoCommunity($email, $code) 
{ 
$sql = "insert into community_players (community_id, player_id) select communuities.id, users.id from communuities inner join users on communities.admin = users.user_email where users.user_email = '".$email."' and communities.code = '".$code."'"; 
$statement = $this->conn->prepare($sql); 

if(!$statement) throw new Exception($statement->error); 

$statement->bind_param("ss", $email, $code); 
$returnValue = $statement->execute(); 

return $returnValue; 
} 

それはXcodeのに戻ってエラーを投げているが - IIは、SQLステートメント内の関数内の変数を使用しようとすると、多分私は間違った構文を持っていると思いましたか?

アイデア?

おかげ

+1

PDOを使用しようとしていますか?あなたの接続オブジェクトは何ですか?また、エラーを表示してください。 –

答えて

2

あなたがここにそうであるようにあなたは、SQL文字列に変数を連結するべきではありません。

users.user_email = '".$email."' and communities.code = '".$code."'"; 

それは準備文の全体の目的に反して。準備済みステートメントは、適切にエスケープされた値に置き換えられるプレースホルダを定義できるようにすることにより、SQL-injectionから保護します。

そのため、(周囲の引用符疑問符、)プレースホルダを使用する必要があります。

$statement->bind_param("ss", $email, $code);
users.user_email = ? and communities.code = ?"; 

はその後、2つのプレースホルダにあなたの変数をバインドされません。第1引数の各sは、それぞれの値を文字列として扱うべきであることを示します。 MySQLはこのように値を正しくエスケープします。

したがって、存在しないプレースホルダに値をバインドしようとしている可能性が最も高いエラーが発生している可能性があります。


  1. より利用可能なオプションについてmysqli_stmt::bind_param() documentationを参照してください。
0

は、あなたはすべてのケース

$sql = "insert into community_players (community_id, player_id) 
     select communuities.id, users.id 
     from communuities 
     inner join users on communities.admin = users.user_email 
     where users.user_email = '".$email."' and communities.code = '".$code. "'"; 

に適切なテーブル名を使用していることを確認し 他でいくつかの分野でcommunuitiesやコミュニティを持っていると私は代わりに、文字列の連結をPARAMを結合で使用するPDOを示唆しています。 。(その他の接続)

関連する問題