2012-05-14 22 views
1

中調用mysql存儲過程我正在調用帶兩個輸入參數的mysql存儲過程。這是我的代碼有:PHP在參數

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

執行的時候,我得到:

Notice: Undefined variable: dbh in E:\xampp\htdocs\php4\default.php on line 52 Fatal error: Call to a member function prepare() on a non-object in E:\xampp\htdocs\php4\default.php on line 52

我該如何解決這個問題?

謝謝。

+1

要麼你沒有創建任何數據庫連接文件/類或如果你創建你不包括它? –

+0

我創建了一個到數據庫的連接。查看我編輯的帖子。 – pyram

回答

7

編輯:看到更多代碼後,您試圖將mysql_()函數與PDO混合使用。你不能這麼做 - 相反,只能使用PDO。這兩個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(); 
+0

謝謝。我執行了你的代碼,但我得到這個錯誤:--------------- **警告:PDOStatement :: execute()[pdostatement.execute]:SQLSTATE [HY093]:無效的參數編號:綁定變量的數量與第40行的E:\ xampp \ htdocs \ php4 \ default.php中的標記數量不匹配。** ------數據庫中的存儲過程接收兩個輸入參數。這裏有什麼問題? – pyram

+0

@pyram SEe上面的變化 - 你需要一個bindParam()調用每個參數。如果您有其他輸出參數要綁定,請爲輸出添加第三個調用。 –

+0

非常感謝!.......... – pyram