php - 在函数内部调用 PDO 失败
问题描述
我正在尝试使用一个函数来执行我所有的 PDO 查询。使用该功能时遇到 500 错误。如果我不使用该功能,我能够成功执行代码。
您会注意到下面的工作代码块和非工作代码块之间的唯一区别是函数的使用。
为什么在函数内部调用代码会失败?
作品:
try {
$conn = new PDO($dsn, $username, $password, $options);
}
catch (PDOException $e){
echo "Connection failed: " . $e->getMessage();
}
$info = array();
$info['fname'] = $_POST['fname'];
$info['lname'] = $_POST['lname'];
$info['email'] = $_POST['email'];
$info['password'] = password_hash($_POST['password'], PASSWORD_DEFAULT);
$info['datecreated'] = date("Y-m-d H:i:s");
$sql = "INSERT INTO Users (fname, lname, email, password, datecreated)
VALUES (:fname, :lname, :email, :password, :datecreated)";
try {
$stmt=$conn->prepare($sql);
$stmt->execute($info);
}
catch (PDOException $e)
{
echo $sql . "PDO query failed: <br>" . $e->getMessage();
}
不工作
try {
$conn = new PDO($dsn, $username, $password, $options);
}
catch (PDOException $e){
echo "Connection failed: " . $e->getMessage();
}
$info = array();
$info['fname'] = $_POST['fname'];
$info['lname'] = $_POST['lname'];
$info['email'] = $_POST['email'];
$info['password'] = password_hash($_POST['password'], PASSWORD_DEFAULT);
$info['datecreated'] = date("Y-m-d H:i:s");
$sql = "INSERT INTO Users (fname, lname, email, password, datecreated)
VALUES (:fname, :lname, :email, :password, :datecreated)";
function pdoquery ($sql, $info){
try {
$stmt=$conn->prepare($sql);
$stmt->execute($info);
}
catch (PDOException $e)
{
echo $sql . "PDO query failed: <br>" . $e->getMessage();
}
}
pdoquery($sql,$info);
解决方案
尝试关注
$info = array();
$info['fname'] = $_POST['fname'];
$info['lname'] = $_POST['lname'];
$info['email'] = $_POST['email'];
$info['password'] = password_hash($_POST['password'], PASSWORD_DEFAULT);
$info['datecreated'] = date("Y-m-d H:i:s");
$sql = "INSERT INTO Users (fname, lname, email, password, datecreated)
VALUES (:fname, :lname, :email, :password, :datecreated)";
function pdoquery ($sql, $info, $conn){
$stmt=$conn->prepare($sql);
$stmt->execute($info);
return $stmt;
}
pdoquery($sql,$info, $conn);
简而言之,您忘记传递$conn
给您的函数。
推荐阅读
- r - 在 R 中的行之间查找公共字符串
- esper - 在第一次输出后终止嵌套上下文
- android-studio - 如何正确导入项目?
- python - 在 Python Google Cloud Functions 中使用 URL 路径变量
- javascript - 从类返回字符串 - JavaScript
- javascript - JS - 在字符串中创建空格,直到它获得一定的宽度
- javascript - SEQUELIZE 不会通过插入一行来自动增加 id?
- html - Chrome 和 Firefox 中的 xpath 没有黄色高亮显示
- c# - PunRPC 方法无法在所有客户端上实例化游戏对象
- java - Spring Cloud Stream 手动轮询器 Kafka