gpt4 book ai didi

php - mySQL 事务不工作

转载 作者:行者123 更新时间:2023-11-29 04:50:50 24 4
gpt4 key购买 nike

我有以下代码:

<?php

// Conexion a MySQL



$mysql_link = mysql_connect( 'localhost', 'root', '010101' );

if (!$mysql_link) {
die('No se pudo conectar a la DB: ' . mysql_error());

}

$mysql_db = mysql_select_db('test', $mysql_link);

if (!$mysql_db) {
die ('No se pudo seleccionar DB: ' . mysql_error());
}

$mysql_doc_query = "INSERT INTO documents (name, wfid, docid, archivo) VALUES ('{$CodDoc}: {$documentoNombre} de {$DNI}', '{$workflowNombre}', '{$documentoNombre}', '{$archivoNombre}' );
INSERT INTO keywords (document_id, keyword, value) VALUES (LAST_INSERT_ID(), 'DNI', '{$DNI}' ), (LAST_INSERT_ID(), 'Cuit Empleador',
'{$cuitEmpleador}' ), (LAST_INSERT_ID(), 'DigitalizadoPor', '{$usuario}' ),
(LAST_INSERT_ID(), 'Direccion IP', '{$IP}' ), (LAST_INSERT_ID(), 'Ubicacion', CONCAT('pdfs/',LAST_INSERT_ID(),'.pdf') );";

// Insert en mysql
$log = fopen('/dev/shm/log.txt', 'w');
if( $log ) {
fwrite( $log, $mysql_doc_query );
}

mysql_query("START TRANSACTION");
if (mysql_query($mysql_doc_query) == TRUE)
{
mysql_query("COMMIT");
echo "\nCOMMIT!";
}
else {
mysql_query("ROLLBACK");
echo "\nROLLBACK!";
}
mysql_close($mysql_link);
fclose ($log);
?>

它总是给我回滚,但我不明白为什么。

有什么线索吗? log.txt 存档中生成的代码可以在 PHP MY ADMIN 中执行而不会出现问题。 (我知道没有引用变量,但这是更大脚本的一部分)。

非常感谢。

最佳答案

mysql_query() 一次只支持一个语句。您正在一次执行多个 INSERT 语句:

$mysql_doc_query = "INSERT INTO documents (name, wfid, docid, archivo) VALUES     ('{$CodDoc}: {$documentoNombre} de {$DNI}', '{$workflowNombre}', '{$documentoNombre}',     '{$archivoNombre}' );
// Oops, new statement here! mysql_query() can't do that.
INSERT INTO keywords (document_id, keyword, value) VALUES (LAST_INSERT_ID(), 'DNI', '{$DNI}' ), (LAST_INSERT_ID(), 'Cuit Empleador',
'{$cuitEmpleador}' ), (LAST_INSERT_ID(), 'DigitalizadoPor', '{$usuario}' ),
(LAST_INSERT_ID(), 'Direccion IP', '{$IP}' ), (LAST_INSERT_ID(), 'Ubicacion', CONCAT('pdfs/',LAST_INSERT_ID(),'.pdf') );";

这可以通过 ROLLBACK block 中的 mysql_error() 进行调试:

  if (mysql_query($mysql_doc_query) == TRUE)
{
mysql_query("COMMIT");
echo "\nCOMMIT!";
}
else {
echo "Error in query: " . mysql_error();
mysql_query("ROLLBACK");
echo "\nROLLBACK!";
}

如果需要执行两次 INSERT,则需要两次单独调用 mysql_query(),并在每次调用后检查错误。如果两者都失败,请执行您的 ROLLBACK

关于php - mySQL 事务不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11853249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com