2

2 つの入力パラメーターを使用して mysql ストアド プロシージャを呼び出しています。これは私が持っているコードです:

if (isset($_POST['button1'])) {
    $con = mysql_connect("localhost:3306","root","");
    if (!$con) {     
        echo '<b>Could not connect.</b>';
        die(mysql_error()); // TODO: better error handling
    } else {          
        mysql_select_db("php_database_1", $con);

        $username_v = $_POST['username'];
        $password_v = $_POST['password'];

        $stmt = $dbh->prepare("CALL login(?, ?)");
        $stmt->bindParam(2, $username_v, $password_v, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 

        // call the stored procedure
        $stmt->execute();

        print "procedure returned $username_v\n";

実行すると、次のようになります。

注意: 未定義の変数: 52 行目の E:\xampp\htdocs\php4\default.php の dbh 致命的なエラー: E:\xampp\htdocs\php4\default の非オブジェクトでメンバ関数 prepare() を呼び出します。 52行目のphp

どうすればこれを修正できますか?

ありがとう。

4

3 に答える 3

7

編集mysql_()済み: より多くのコードを見た後、関数を PDOと混在させようとしました。それはできません -- 代わりに、PDO のみを使用してください。2 つの API は連携して動作せず、古いmysql_*()API は準備済みステートメントをまったくサポートしていません。

データベースに接続していないか、PDO オブジェクトをインスタンス化していません。

$username_v = $_POST['username'];
$password_v = $_POST['password'];
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';

// You must first connect to the database by instantiating a PDO object
try {
    $dbh = new PDO($dsn, 'root', 'root_db_pw');
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

// Then you can prepare a statement and execute it.    
$stmt = $dbh->prepare("CALL login(?, ?)");
// One bindParam() call per parameter
$stmt->bindParam(1, $username_v, PDO::PARAM_STR); 
$stmt->bindParam(2, $password_v, PDO::PARAM_STR); 

// call the stored procedure
$stmt->execute();
于 2012-05-14T18:52:07.607 に答える