PHP Web服务sproc与sql查询

时间:2013-12-14 17:43:03

标签: php mysql post stored-procedures service

所有

我正在使用PHP和mySQL中的存储过程创建一个Web服务。我在使用sproc CALL时遇到问题,而标准的INSERT INTO查询运行良好。谁能帮助我做错了什么?如果我使用INSERT查询取消注释该行并使用sproc CALL注释掉该行,则PHP例程可以正常工作...谢谢

 $stmt = $this->db->prepare("call Game.addUser(?,?,?,?)");
 //$stmt = $this->db->prepare('INSERT INTO Game.activeUsers (playerName, email, zip,     `password`) VALUES(?,?,?,?);');
 $stmt->bind_param("ssss", $playerName, $email, $zip, $pw);
 $stmt->execute(); 

谢谢!

1 个答案:

答案 0 :(得分:0)

由于您已将autocommit设置为false,因此您需要手动提交事务,并确保您的表引擎首先支持事务(InnoDB)

// Create new user
$stmt = $this->db->prepare("call Game.addUser(?,?,?,?);");
$stmt->bind_param("ssss", $playerName, $email, $zip, $password);
$stmt = execute();
$stmt->bind_result($verbose);
$stmt->close();

应该看起来更像

// Create new user

$stmt = $this->db->prepare("call Game.addUser(?,?,?,?);");
$stmt->bind_param("ssss", $playerName, $email, $zip, $password);
$stmt->execute();
$stmt->bind_result($verbose);
$this->db->commit();//change here
$stmt->close();

注意:我没有为您进行任何错误检查,因此您需要输入一些。在处理事务时趋向于这样:

if(!$this->db->commit()){
    $this->db->rollback();
}

关于日志记录,我建议启动here