在事务中使用MySQL变量和PHP变量

时间:2016-08-27 11:29:22

标签: php mysql pdo transactions

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

我喜欢将$ b与从变量第7行中获得的MySQL变量@A连接/连接起来。说MySQL变量@A给出一个值“试试这个”然后我想为saledesc插入“试试这个我的添加” saleno第10行的字段,如第二个黄线区块$ conn->查询(“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(“INSERT INTO sales(saleno,saledesc)   VALUES('10' ,@ A $ B)“);

    $conn->commit();

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

1 个答案:

答案 0 :(得分:0)

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

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

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

您应该使用类似的东西显式地在查询中连接两个变量。

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

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