【问题标题】:Using MySQL variable with PHP variable within a transaction在事务中使用 MySQL 变量和 PHP 变量
【发布时间】:2017-01-03 23:19:35
【问题描述】:

我使用 MySQL 和 PHP 编写了以下事务代码。在第一个黄色块中的代码中,我将字符串值分配给 php 变量 $b。我想在第二个黄色块 MySQL 事务语句中使用这个值。

我喜欢将 $b 与从 sale no row 7 获得的 MySQL 变量 @A 组合/连接。假设 MySQL 变量 @A 给出一个值“try this”,然后我想为 saledesc 插入“try this my add” saleno 第 10 行的字段,如第二个黄线块 $conn->query("INSERT INTO sales(saleno,saledesc) VALUES('10',@A$b)");

但是上面的插入失败了。执行此操作的正确语句语法/方式是什么。我的代码如下:

$b = "我的添加";

$sqlstat = "SELECT @A:=saledesc FROM sales WHERE saleno='7'";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);

    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //Transaction Start
    $conn->beginTransaction();
    $conn->query("$sqlstat");

$conn->query("插入销售(saleno,saledesc) VALUES('10',@A$b)");

    $conn->commit();

    }
    catch(PDOException $e)
    {
    echo $sql . "<br>" . $e->getMessage();
    $conn->rollback();
    }
    $conn = null;

【问题讨论】:

    标签: php mysql pdo transactions


    【解决方案1】:

    @A MySQL 变量位于 MySQL 服务器中,$b 变量位于您的 php 程序的上下文中。表达式 @A$b 试图连接它们,但是当 php 将您的查询发送到 MySQL 时会产生奇怪的结果。

     INSERT INTO sales(saleno,saledesc) VALUES('10',@Amy add)   // wrong!
    

    (Amy 是谁?你为什么指望她添加一些东西?MySQL 无法理解这一点。)

    您应该在查询中明确地连接两个变量,使用类似这样的方法。

    $conn->query("INSERT INTO sales(saleno,saledesc) VALUES('10',CONCAT(@A, '$b'))");
    

    顺便说一下,这不是 RDBMS 意义上的transaction

    【讨论】:

      猜你喜欢
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      • 2020-07-31
      • 1970-01-01
      相关资源
      最近更新 更多