いつものように、私はPHPでベストプラクティスを考えていました。だから、私が見つけたいくつかの例で遊んで始めました。bindParam()のMysqli Prepared Statementが動作しない
スクリプトを実行しているとき、私はこのエラーを持っている:
Fatal error: Call to a member function bindParam() on a non-object in /opt/lampp/htdocs/phpSecurity/PreparedStatments/Insert-Multi-Binded-Params/Insert Simple Method.php on line 10
ここでは、コードを行きます。
Method.php
<?php
require_once '../config.php';
$stmt = $db->prepare("INSERT INTO coisas (nome, telefone, bi) VALUES (?, ?, ?)");
$nome = 'Fabio Antunes';
$telefone = 916810641;
$bi = 123093456;
$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);
$stmt->execute();
$stmt->close();
$db->close();
?>
config.phpの
<?php
$server_host = 'localhost';
$server_user = 'root';
$server_password = '';
$server_db = 'PreparedStatements';
$db = new mysqli($server_host, $server_user, $server_password, $server_db);
?>
シンプル挿入しないで、私はここで間違ってやっていることを確認、これはphp.netで見つかった同様の例があり、なぜ動作していないのですか? PS:私はSELECT SQLコマンドでいくつかのプリペアドステートメントを実行するために使用したので、mysqli接続は問題ではないと思います。そしてかなりうまくいった。
EDIT
解像度とその理由。
よく、example私はクエリの各値にbind_param()
を使用する必要があります。しかしBartのおかげで、彼は私のコードで問題を解決することができました。
$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);
それは次のようになります:
$stmt->bind_param("sii", $nome, $telefone, $bi);
今 "SII" であるか疑問に思うかもしれない人のためにそれがある
。
私はそれが "$ var"をそれぞれの疑問符 "?"順番に。
したがって、1つでbind_param()
私はそれらをすべて同時にバインドすることができ、bind_param()
の通常の使用では、バインドされるデータの種類を指定する必要があります。
私が最初にバインドする値は、$nome
"s"で指定された文字列です。
$telefone
と$bi
は、 "i"を持っているため整数です。
他にも同様の問題がありますが、他のデータタイプ(php.netから)になります。
i = Integer;
s = String;
d = Double;
b = Blob;
誰かがより良い説明として投稿またはコメントしてください。だから私は自分自身を改善することができます。
ありがとうございました。
ベストプラクティスのための良い提案。私は試しましたが、問題を解決しませんでした。他のアイデア? –
$ stmt-> bind_param( "sii"、$ nome、$ telefone、$ bi);働いた。 –
お買いものに役立つ情報交換ができます。 –