EDIT:MySQLの構文エラー、しかしMySQLの端子での作品
は、私は、フォームデータを専用に送信されます私のバックエンドのPHPにAJAX POSTをしています以下の私のコメントで「解決策」 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のechoステートメントを介してWebコンソールに送信されるため、そのまま出力されます。
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
{
}
EDIT:ここ
はPHPです// 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エラーが表示されます。ここではPHPの機能CreateTaskとReadTaskがあります正常に完了しません。しかし、同じ文を別の書式設定なしでMySQL PuTTYウィンドウに貼り付けると、それは問題なく受け入れられます。同じ情報で再度実行しようとすると、プログラムは行が存在することを検出し、「行は存在します」とエコーします。それが想定されている通りです。すべての資格情報が正しいことを確認し、接続が期待どおりに開かれています。
LAST_INSERT_ID()
は、PDOまたはPHPの特定の実装に限定されていますか?私はMySQLがそれを解釈することを意図していると思った。
好奇心が強い人は、tblTaskContentのtblTaskとそのコンテンツを分割しました。なぜなら、ユーザーは自分の仕事に更新を加えることができるからです。 tblTaskContentにはtblTask id FKとタイムスタンプがあり、更新エントリ時間に基づいてデータをリンクしてソート可能に保ちます。
私が知る限り、PHPはクエリ文字列を積み重ねることができません。 – Jer
'$ sql =" START TRANSACTION; ";'トランザクションを開始すると思われるDB接続ではありませんか? $ con-> ST .....のようになる –