6 php mysql database pdo insert
我的问题是,我从这个链接的数据库设计是我的数据库过度设计?
编辑*确定可能使用交易?但如果失败,我应该把回滚放在哪里?
$dbConnect->beginTransaction();
$RegisterInsert = $dbConnect->prepare("INSERT INTO companies (
`name`, `address`, `email`, `phone`, `link`, `verified`) VALUES (
:name, :address, :email, :phone, :link, :verified)");
$RegisterInsert->execute($RegisterData);
$RegisterData2['CID'] = $dbConnect->lastInsertId();
$RegisterInsert = $dbConnect->prepare("INSERT INTO users_companies (
`UID`, `CID`, `role`) VALUES (
:UID, :CID, :role)");
$RegisterInsert->execute($RegisterData2);
$dbConnect->commit();
Run Code Online (Sandbox Code Playgroud)
我应该把回滚放在哪里?
谢谢
交易应以rollback()或结束commit()(仅其中之一)
它通常与if...else语句一起使用,因为逻辑上仅应执行其中之一。
$dbConnect->beginTransaction();
//somecode
//$dbConnect->execute( $someInsert );
//some more code
//$result = $dbConnect->execute( $someSelect );
//$nextRow = $result->fetchRow();
//either commit or rollback!
if( $someResultCheck == true )
$dbConnect->commit();
else
$dbConnect->rollback();
Run Code Online (Sandbox Code Playgroud)
通常在查询涉及复杂逻辑时使用事务。
如果您使用的是MySQL,请确保您没有将MyISAM引擎用于表,因为它不支持事务。
一旦知道整个事务将失败,那么您应该回滚到目前为止所做的事情,而不要尝试任何进一步的更新-因此使用伪代码:
function do_updates(array updates)
{
PDO->beginTransaction();
foreach (updates as statement) {
run statement
if failed {
PDO->rollback();
return false;
}
}
return PDO->commit();
Run Code Online (Sandbox Code Playgroud)
高温超导
C。