編輯:在我的評論「解決方案」下面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 .....' –