質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

1047閲覧

PDOのUPDATEについて

sanepy

総合スコア12

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2019/06/03 12:04

PDOのUPDATEを使ってデータベースの値を更新しようとしていますが、更新されません。

storeaddress カラムに「東京」、「tokyo」等のキーワードが含まれるレコード(部分一致)に対して「storepref」の値を更新しようとしていますが、何故か更新されません。

 どこがおかしいのでしょうか。

PHP

1<?php 2try {$pdo = new PDO('mysql:host=localhost;dbname=hogehogedbname;charset=utf8','userid','password', 3 4[ 5PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 6PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 7] 8 9 10); 11 12//ここから処理 13 14 15 16$stmt = $pdo->prepare("UPDATE uberstoreall SET storepref = ? WHERE storeaddress LIKE ?"); 17 18$params = ['東京都','%東京%']; 19$params2 =['東京都','%tokyo%']; 20$params3 =['東京都','%Tokyo%']; 21$params4 =['東京都','%TOKYO%']; 22 23$stmt->execute( $params ); 24$stmt->execute( $params2 ); 25$stmt->execute( $params3 ); 26$stmt->execute( $params4 ); 27echo $flag; 28//ここまで処理 29} catch (PDOException $e) { 30 31 header('Content-Type: text/plain; charset=UTF-8', true, 500); 32 exit($e->getMessage()); 33 34}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/06/03 12:16

echoしているからには何か出力されていると思いますが、どのような現象が起きていますか?
m.ts10806

2019/06/03 12:21

あと、最初のexecuteだけにしてみるとか。 出来ればテーブル定義(CREATE TABLE)文もご提示いただければと。
退会済みユーザー

退会済みユーザー

2019/06/03 13:18

$pdoや$stmtがFALSEになっていないか点検を。それと、storeaddressに格納されている具体的なデータ例も知りたい。
sazi

2019/06/04 01:42

データの補正なら、直接updateのSQL発行する方が簡単だと思いますけど、PDOを使わなければならない理由は有りますか?
guest

回答1

0

まず大文字小文字の違いは普通にやるとDB側が吸収してくれます
つまりtokyoもTokyoもTOKYOも同じということ
ただtOkYoを除きたいなど厳密な比較をしたいときにはbinで比較します

またsqlを4回回すよりはorでつないだほうが楽ですし
likeの前方後方一致はどうせインデックスを無視するので
効率を気にしないのであればregexpの方が簡単にかけます

SQL

1create table tbl (id int primary key ,storepref varchar(10),storeaddress varchar(100)); 2insert into tbl values 3(1,'','test 東京 test'), 4(2,'','test tokyo test'), 5(3,'','test Tokyo test'), 6(4,'','test TOKYO test'), 7(5,'','test tOkYo test'), 8(6,'','test 大阪 test');

これをベースに

SQL

1select * from tbl where storeaddress regexp '東京|tokyo'

でid=1-5のレコードが拾えるかどうかチェックするところから試してください

投稿2019/06/04 00:22

yambejp

総合スコア114775

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問