Поддерживает ли php 5.6 подготовленное заявление? - PullRequest
0 голосов
/ 01 октября 2019

Поддерживает ли php 5.6 подготовленное заявление? Как я получаю эту ошибку:

"Неустранимая ошибка PHP: вызов функции-члена prepare () на ресурсе"

Вот код:

$testSql = $ce_conn -> prepare('select transaction_id from 
tbl_sales_revenue limit 1');
$testSql -> execute();
$testSql -> bind_result($transaction_id);
$testSql -> fetch();
$testSql -> close();

function connectCE() {
    global $config;
    $ce_conn = mysql_connect($config['Datasources']['CE']['host'], $config['Datasources']['CE']['username'], $config['Datasources']['CE']['password']);
    if (!$ce_conn) {
        die('Could not connect to CE database : ' . mysql_error());
    }
    $ce_selected = mysql_select_db($config['Datasources']['CE']['database'], $ce_conn);
    if (!$ce_selected) {
        die('Could not use CE dot database : ' . mysql_error());
    }
    return $ce_conn;
}

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Да, PHP 5.6 поддерживает подготовленные операторы. Оба расширения MySQLi и PDO обладают этой функциональностью.

Здесь вы используете mysql_* API, который устарел и удален. Не используйте его! Переключитесь на подготовленные заявления.

Кроме того, PHP 5.6 больше не поддерживается, и вы должны рассмотреть вопрос об обновлении как можно скорее.

Пример подготовленного оператора с использованием PDO может выглядеть следующим образом:

$dsn = "mysql:host=$host;dbname=$db;charset=utf8mb4";
$options = [
    \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
    \PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, $user, $pass, $options);

$stmt = $pdo->prepare('select transaction_id from tbl_sales_revenue WHERE id=? limit 1');
$stmt->execute([$_POST['id']]);
$record = $stmt->fetch();

Или с использованием mysqli:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli($host, $user, $pass, $db);
$mysqli->set_charset('utf8mb4');

$stmt = $mysqli->prepare('select transaction_id from tbl_sales_revenue WHERE id=? limit 1');
$stmt->bind_param('s', $_POST['id']);
$stmt->execute();
$record = $stmt->get_result()->fetch_assoc();
1 голос
/ 01 октября 2019

Если вы хотите использовать метод prepare(), вам нужно использовать Класс PDO .

Здесь вы можете найти ссылку для подключенияв PDO. После переключения на PDO вы можете использовать оператор prepare().

...