编辑:在我的评论“解决方案”下面MySQL的语法错误,但在MySQL的终端作品
我做一个AJAX后到我的后端PHP,其中表单数据被发送到一个专门的CRUD php表单,用于创建记录。
SQL语法是这样的,我需要2个命令。因此,我使用BEGIN TRANSACTION; statements; COMMIT;
结构,从而:
START TRANSACTION;
INSERT INTO tblTask (subject, dateOpened, priority) VALUES
('test 1', '2017-02-22 07:09:33', 3);
INSERT INTO tblTaskContent (idTask, dateEntered, text) VALUES
(LAST_INSERT_ID(), '2017-02-22 07:09:33', 'fdsa');
COMMIT;
*格式化为清楚起见,虽然所有的语句由分开;和下面的空间。
MySQL声明通过PHP回声声明吐出到Web控制台,所以这就是程序逐字输出的内容。
这里的PHP:
if($action == 1) //CREATE
{
if($taskVarArr['subject'] && $taskVarArr['priority'] && $taskVarArr['content']) //can create the initial record
{
if(ReadTask($taskVarArr)) //task exists, consider updating existing record
{
echo "Row exists!"; //TODO IS DEBUG
return http_response_code(400);
die();
}
else if(CreateTask($taskVarArr)) //new record, insert
{
return http_response_code(200);
die();
}
}
//if this reached, bad request
return http_response_code(400);
die();
}
elseif($action == 2) //READ ...not used yet
{
}
编辑:这里是PHP函数的CreateTask和ReadTask:
// Create - CRUD
function CreateTask($taskVarArr) //sorry for your eyes
{
$conn = OpenConnection();
$workingDate = date('Y-m-d h:i:s');
$sql = "START TRANSACTION; ";
$sql .= "INSERT INTO tblTask (subject, dateOpened, priority) VALUES ".
"('".$taskVarArr['subject']."', '$workingDate', ".$taskVarArr['priority']."); "; //TODO below this breaks
$sql .= "INSERT INTO tblTaskContent (idTask, dateEntered, text) VALUES ".
"(LAST_INSERT_ID(), '$workingDate', '".$taskVarArr['content']."'); "; //LAST_INSERT_ID() grabs last autonumber
$sql .= "COMMIT;";
//TODO IS DEBUG
echo $sql;
//TODO IS DEBUG
$result = mysqli_query($conn, $sql);
if($result)
{
return true;
}
return false;
}
// Read - CRUD; Only checks if record exists
function ReadTask($taskVarArr)
{
$conn = OpenConnection();
$sql = "SELECT idTask from tblTask WHERE subject = '".$taskVarArr['subject']."';";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result);
return $row['idTask'];
}
return false;
}
我得到的创作,因为ReadTask没有找到记录和的CreateTask一个400错误没有成功完成。但是,当我将相同的语句粘贴到我的MySQL PuTTY窗口而没有附加格式时,它就可以接受它。在尝试以相同的信息再次运行之后,程序检测到行存在并且回声“行存在!”正如它应该的那样。我已验证所有凭据是否正确,连接是否按预期打开。
是LAST_INSERT_ID()
仅限于PDO或PHP中的具体实现吗?我认为MySQL是为了解释这一点。
如果您好奇,我已经将tblTask及其内容分割为tblTaskContent,因为我希望用户能够在他们的任务中添加更新。在tblTaskContent中有一个tblTask ID FK和一个时间戳,用于根据更新输入时间保持数据链接和排序。
据我所知,PHP不能堆积查询字符串 – Jer
'$ sql =“START TRANSACTION;”;'是不是你的数据库连接,假设开始一个交易?像$ CON> ST .....' –