【问题标题】:Does php 5.6 support prepared statement?php 5.6 是否支持准备好的语句?
【发布时间】:2020-01-30 08:57:21
【问题描述】:

php 5.6 是否支持预处理语句?当我收到此错误时:

“PHP 致命错误:调用资源上的成员函数 prepare()”

【问题讨论】:

  • @NikleshRaut 立即查看
  • 好像$ce_conn 不是 PDO 变量。
  • @JashandeepSingh:请先通过this link
  • @JashandeepSingh mysql_connect 在 PHP 5.5.0 中已弃用。 php.net/manual/en/function.mysql-connect.php
  • 您正在使用mysql_* lib,其中 1) 不支持 OOP 样式 2) 没有准备语句功能,考虑移动到 mysqli_* API 甚至更好的 PDO,因为 mysql_* 是从 PHP 5.5 弃用

标签: php prepared-statement php-5.6


【解决方案1】:

是的,PHP 5.6 支持预处理语句。 MySQLiPDO 扩展都具有此功能。

您在这里使用的是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();

【讨论】:

    【解决方案2】:

    如果要使用prepare()方法,则需要使用PDO Class

    Here您可以找到有关如何连接到 PDO 的链接。 切换到 PDO 后,可以使用prepare() 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 2021-01-28
      • 1970-01-01
      相关资源
      最近更新 更多