我正在使用两个输入参数调用一个 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";
执行时,我得到:
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
我该如何解决这个问题?
谢谢。
最佳答案
已编辑:看到更多代码后,您尝试将 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();
关于PHP调用带in参数的mysql存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10589273/