2009-04-07 6 views
0

私は2つのその後のmysqliのステートメント、および第二リターンを持っていますか?これは2つの異なる接続を開く必要があることを意味しますか? これを避ける方法はありますか(SQL接続の詳細を1つのファイルに保存するのが大好きです)?mysqliなぜこれが起こるのですか?これが起こるのはなぜ</p> <blockquote> <p>Fatal error: Call to a member function bind_param() on a non-object in ...</p> </blockquote> <p>:

ここでコード:

$db = new mysqli("localhost", "root", "", "database"); 

$stmt = $db->prepare("UPDATE posts SET vote_".$_POST['vote']." = vote_".$_POST['vote']." + 1 WHERE id=?"); 
$stmt->bind_param('s', $_POST['id_post']); 
$stmt->execute(); 
$stmt->close(); 

$stmt = $db->prepare("INSERT INTO votes (kind, users_id, posts_id) VALUES (?, ?, ?)"); 
$stmt->bind_param('sss',$_POST['vote'],$_POST['id_user'],$_POST['id_post']); 
$stmt->execute(); 
$stmt->close(); 
+0

これらの投稿入力を消毒することを願っています。 – cletus

+0

私はmysqliを使用するとSQLインジェクションを完全に回避できると思いましたか? – 0plus1

+1

バインドされた値/パラメータを使用する場合は、SQLインジェクションから安全です。しかし、ユーザーが他のユーザーのユーザーIDを送信できないのはなぜですか? –

答えて

1

私はあなたがそれの上にbind_paramを呼び出すときに、あなたの$ stmtは変数がnullだと思います。多分あなたの$ _POST ['vote']は空ですか?コマンドでパラメータをバインドする前にチェックすることができます

0

$db->prepare()で何か問題が起きた可能性があります。チェックは$db->errorです。

+0

それは問題だった、私は異なった1つの分野に名前をつけた..誤りをチェックしなかったために私に恥がある。私はそれが2つの連続した質問を作ることの問題だと思った。 – 0plus1

関連する問題

 関連する問題