PDO не работает при вызове внутри функции - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь использовать функцию для выполнения всех моих запросов 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);

1 Ответ

0 голосов
/ 10 июля 2020

Попробуйте следовать

$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 своей функции.

...