$sql='INSERT INTO extra(id,userid,exid,date,extext) values(null,?,?,?,?)';
$stmt=$dbh->prepare($sql);
$flag=$stmt->execute(array($placeholders[':userid'],$placeholders[':exid'],$placeholders[':date'],$placeholders[':extext']));
if($flag){
print('データの追加に成功しました。');
}else{
print('データの追加に失敗しました。');
}
}
上記の文で、インサートを行うと初めの一つのデータだけはインサートできますが、その後は全く追加できません。idがプライマリーキーで、autoincrementをしているのですが、自動入力の際には
引数をnullにすると自動でインクリメントしてくれると書いてありました。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>PHPmyadmin で設定
(1)テーブルを開いて構造を選びます。
(2)各カラムの前のチェックボックスあるので必要なものにチェックします
(3)テーブルの下にある「ユニーク」というアイコンか文字をクリックします
phpMyAdminでやるとインデックス名を任意につけることができません。
インデックス名を変更したいならインデックスを作ったあとで、
インデックスの編集メニューから名称を変更してください
No.3
- 回答日時:
>unique id をつけていると、3つがすべて重複でなく、一つだけでも重複していると
>データが追加できません
それはユニーク属性の付け方がおかしい
3つが完全に合致したときだけ処理したいなら
複合インデックスを設定してください
create table extra(id int not null primary key auto_increment,userid int,exid int,date date,extext text,unique test_index(userid,exid,date))
ありがとうございます。複合インデックスを設定したら、ON DUPLICATE UPDATE 構文も使えるようになりました。ユニークキーではなくて、インデックスを付けるべきだったんですね。
解決しました。
No.2
- 回答日時:
あ、よくみたらソースのコピペが適当すぎて
$pdoと$dbhがずれてますね
どちらかに統一してください
それと$placeholdersがどうやって渡されているかわからないので
うまくいかないようならその辺の補足も必要かも
No.1
- 回答日時:
書式はあっているっぽいです
<?PHP
$dsn = 'mysql:host=localhost; dbname=testdb';
$user = 'root';
$password = 'mypassword';
$pdo = new PDO($dsn, $user,$password);
try{
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql='INSERT INTO extra(id,userid,exid,date,extext) values(null,?,?,?,?)';
$stmt=$dbh->prepare($sql);
$flag=$stmt->execute(array($placeholders[':userid'],$placeholders[':exid'],$placeholders[':date'],$placeholders[':extext']));
}catch(PDOException $e){
die($e->getMessage());
}
で、エラーはつかめないでしょうか?
extraテーブルで主キーがidだとして、実はuseidもユニーク属性がついていて
はじかれるとか想像はできても運用状況がわからないのでなんとも・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- PHP プログラムコードを入力する場合改行してもいいですか? 2 2022/10/02 16:05
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- PHP php エラー 2 2022/10/23 16:43
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
[MySQL] 3つのテーブルの結合で...
-
エクセルの関数について教えて...
-
sqlで、600行あるテーブルを100...
-
SQLサーバから、項目の属性(型...
-
上位3位を求めるSQL文は?
-
副問合せの書き方について
-
SQL Left Join で重複を排除す...
-
SQLにて特定の文字を除いた検索...
-
[MySQL] UNIQUE制約の値を更新...
-
Access パラメータクエリをcsv...
-
selectした大量データをinsert...
-
親と子供が複数のSQL取得方法
-
テーブルが5つの時の結合の仕...
-
書籍の内容はまともでしょうか?
-
クエリ表示と、ADOで抽出したレ...
-
【SQL文】Insert into文で文法...
-
VIEWの元のテーブルのindexって...
-
inner joinをすると数がおかし...
-
Mysqlでunionを使った検索速度...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
SQLサーバから、項目の属性(型...
-
副問合せの書き方について
-
VIEWの元のテーブルのindexって...
-
エクセルの関数について教えて...
-
SQLにて特定の文字を除いた検索...
-
マイクラPC版のコマンドで効率...
-
select文のwhere句に配列を入れ...
-
sqlで、600行あるテーブルを100...
-
ある条件の最大値+1を初番する...
-
inner joinをすると数がおかし...
-
Unionした最後にGROUP BYを追加...
-
期間の重複を調べるSQL文につい...
-
クエリ表示と、ADOで抽出したレ...
-
Access パラメータクエリをcsv...
-
PL/SQLの変数について
-
MySQLのDATE型カラム値がNULLの...
-
php+mysqlで複数選択削除について
-
上位3位を求めるSQL文は?
おすすめ情報
回答ありがとうございます。
userid,exid,dateにユニークIDをつけています。
この3つが重複したときにupdate するように、後でon duplicate key update を付けたそうと思っていたのですが、unique id をつけていると、3つがすべて重複でなく、一つだけでも重複していると
データが追加できません。duplicate key update 構文の例文では3つのデータが重複した時というような例文もあったのですが、http://d.hatena.ne.jp/IwamotoTakashi/20080329/p1
うまくいきませんでした。
すみません。またわからなくなってしまいました。
この複合インデックスですが、PHPmyadmin で設定するなら、構造タブの中のインデックスという
アイコンの事ですか?