SQL SERVERテーブルに値を挿入するとき、私のPHPスクリプトに何か問題があります。AUTO INCREMENTテーブルがSQL ServerのPHPで配列としてインデックス付けされないようにするにはどうすればいいですか?
ここではスクリプトです:私はそのスクリプトを実行すると、サーバーにデータを挿入することに成功している
<?php
include_once 'core/init.php';
function report_cctv(){
#info utama seluruh fungsi
global $conn;
$notif = '';
#data input laporan pelanggaran
$array_pelanggaran = [$_POST['w'],
$_POST['n'],
$_POST['j'],
$_POST['l'],
$_POST['b']];
$data_pelanggaran = "'" . implode("','", $array_pelanggaran) . "'";
#data input laporan kerusakan
$array_kerusakan = [$_POST['w2'],
$_POST['n2'],
$_POST['j2'],
$_POST['l2'],
$_POST['b2']];
$data_kerusakan = "'" . implode("','", $array_kerusakan) . "'";
#data input laporan lain
$array_lain = [$_POST['w3'],
$_POST['n3'],
$_POST['j3'],
$_POST['l3'],
$_POST['b3']];
$data_lain = "'" . implode("','", $array_lain) . "'";
//query laporan pelanggaran
$query = "INSERT INTO pelanggaran VALUES ($data_pelanggaran)";
//query laporan kerusakan
$query2 = "INSERT INTO laporan_kerusakan VALUES ($data_kerusakan)";
//query laporan lain
$query3 = "INSERT INTO laporan_lain VALUES ($data_lain)";
if(strlen(isset($data_pelanggaran)) > 0) {
sqlsrv_query($conn,$query);
if (strlen(isset($data_kerusakan)) > 0) {
sqlsrv_query($conn,$query2);
if (strlen(isset($data_lain)) > 0) {
sqlsrv_query($conn,$query3);
}else {
echo "data lain gagal diinput";
}
}else {
echo "data kerusakan gagal diinput";
}
}else {
echo "data pelanggaran gagal diinput";
}
}
?>
が、IDテーブルは、私は別のテーブルにそれらの配列を挿入したのも、値を自動的に追加されます空のフィールドを持つ他のテーブルを無視します。
これが最初のデータである、私は「laporan_kerusakan」テーブルにそれを挿入:
この写真を見て、id列を参照してください、それが正常に設定し、1
から開始しました。しかし、私は別のテーブルに新しいデータを挿入する場合、IDは、それが配列として最初のID値を保存し、2
IDとして他のテーブルにそれを挿入することを意味し、もう1で開始しません2aから始まった他のテーブル。
この現象が発生している理由誰もが、してください説明できますか?また、この問題を解決するソリューションはありますか?私はせずにページ上の唯一の1つのボタンで各フォーム上のデータを挿入したい
..
EDITを
は前にどうもありがとうございました、と私は私の悪い話すごめんなさい自動インクリメント値を持つ他のテーブルに影響を与えます。
例:
私は上記の最初の絵のような最初の値を挿入しています、と私は他のテーブルに他のデータを挿入します。
しかし、2回目の送信ボタンをクリックすると、結果は上記の2番目の画像に似ています。 ID列は「1」ではなく「2」で開始されました。それを修正するには?
はここで前に要求されるように私のSQLテーブル作成スクリプトだ、と私は英語の言語にインドネシアからフィールド名をtrnaslated:
use dailyreport
/* table pelanggaran (violation table) */
create table pelanggaran(
id int identity(1,1) primary key not null,
violation_time varchar(5),
violation_suspect varchar(100),
id_type_of_violation int,
id_store_location int,
screenshot_proof text
);
/* table laporan_kerusakan (damage_report) */
create table laporan_kerusakan(
id int identity(1,1) primary key not null,
damaged_time varchar(5),
damage_detail varchar(100),
id_type_of_damaged_things int,
id_damaged_things_location int,
screenshot_proof text
);
/* table laporan_lain (other_report) */
create table laporan_lain(
id int identity(1,1) primary key not null,
other_time varchar(5),
other_detail varchar(100),
id_other_report int,
id_other_report_location int,
screenshot_proof text
);
あなたの問題は明確ではありません、あなたはより良く説明できますか?テーブル内の同じIDを持つ行を持つことはできません。自動的にインクリメントする列は自動的に増加します。あなたが説明していない別のテーブル間に関係がありますか? – miken32
テーブルを定義したら、IDをどのように定義しましたか?テーブルの作成に使用される構文を表示してください。これは何が起こっているのかを説明します。 *ただし、IDが同じオブジェクトを表すため、IDが2つのテーブル間で一意である必要がある場合は、外部キーを使用し、IDを同じにする必要はありません。 – Nic3500