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

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

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

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

PHP

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

Q&A

2回答

1314閲覧

PHP SQL データベース接続

marimokomokmOk

総合スコア52

SQL

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

PHP

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

0グッド

1クリップ

投稿2017/02/24 03:31

PHPのSQL文についてわからないところがあります。

php

1 $result = $pdo->prepare('update words set word=?, sense=?, memo=? where id=?'); 2 $result -> execute(array(h($_POST['word']),h($_POST['sense']),h($_POST['memo']),$_POST['id']));

なんで変数($result)にわざわざ代入するのでしょうか。
意味が解りません。

php

1<?php 2function h($str) { 3 return htmlspecialchars($str); 4} 5//PDO()コンストラクタ インスタンス初期化 6$pdo = new PDO('mysql:host=localhost;dbname=takahashi1;charset=utf8', 'takahashi', 'takahashi' ); 7// もし修正ボタンが押されたら 8if ($_POST ['button4']) { 9 foreach ( $pdo->query ('select * from words order by id desc') as $row ) { 10 echo '<tr>'; 11 echo '<form action="" method = "post">'; 12 echo '<input type="hidden" name="command" value="update">'; 13 echo '<input type="hidden" name="id" value="', $row ['id'], '">'; 14// echo '<td>', $row ['id'], '</td>'; 15 echo '<td>'; 16 echo '<input type="text" name="word" size="10" value="', $row ['word'], '">'; 17 echo '</td>'; 18 echo '<td>'; 19 echo '<input type="text" name="sense" size="40" value="', $row ['sense'], '">'; 20 echo '</td>'; 21 echo '<td>'; 22 echo '<input type="text" name="memo" size="20" value="', $row ['memo'], '">'; 23 echo '</td>'; 24 echo '<td><button type="submit" style="border: 1px solid #ff44ff; color: #ee00ff; background-color: #eeccff;">更新</button></td>'; 25 echo '</form>'; 26 echo '<form action="" method="post">'; 27 echo '<input type="hidden" name="command" value="delete">'; 28 echo '<input type="hidden" name="id" value="', $row ['id'], '">'; 29 echo '<td><button type="submit" style="border: 1px solid #ff44ff; color: #ee00ff; background-color: #eeccff;">削除</button></td>'; 30 echo '</form>'; 31 echo '</tr>'; 32 echo "\n"; 33 34 } 35} 36if(isset($_POST['command']) || !$_POST){ 37 switch($_POST['command']){ 38 case 'update': 39 //PDOのインスタンスを代入した変数$pdoを指定することでPDOクラスに用意された機能が利用可能になる 40 $result = $pdo->prepare('update words set word=?, sense=?, memo=? where id=?'); 41 $result -> execute(array(h($_POST['word']),h($_POST['sense']),h($_POST['memo']),$_POST['id'])); 42 break; 43 case 'delete': 44 $result = $pdo->prepare('delete from words where id=?'); 45 $result->execute(array($_POST['id'])); 46 break; 47 case 'insert': 48 $result = $pdo->prepare('insert into words values(null,?,?,?)'); 49 $result->execute(array(h($_POST['word']),h($_POST['sense']),h($_POST['memo']))); 50 break; 51 case 'listDisplay': 52 break; 53 case 'search': 54 $vKeyword = isset($_POST['keyword'])?$_POST['keyword'] : ''; 55 $result = $pdo->prepare('select * from words where word like ? or sense like ? or memo like ?'); 56 $result->execute(array( 57 '%' . $vKeyword . '%', 58 '%' . $vKeyword . '%', 59 '%' . $vKeyword . '%' 60 ) ); 61 break; 62 } 63 if(!$_POST['command'] == 'search'){ 64 $result = $pdo->query('select * from words order by id desc'); 65 } 66 foreach ($result->fetchAll() as $row){ 67 echo '<tr>'; 68 // echo '<td width="30" height="35" align="center" width="110" height="35">', h($row['id']), '</td>'; 69 echo '<td class="font3"><b>', h($row['word']), '</b></td>'; 70 echo '<td width="150" class="font3">', h($row['sense']), '</td>'; 71 echo '<td width="150" class="font3">', h($row['memo']), '</td>'; 72 echo '</tr>'; 73 echo "\n"; 74 } 75} 76?>

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

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

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

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

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

guest

回答2

0

本来PDOExceptionがthrowされる設定にしていない場合は
以下のように prepare()の戻り値でエラー判定を行うべきです。

(php.net)PDO::prepare #返り値

もしデータベースサーバーが正常に文を準備する場合、 PDO::prepare() は PDOStatement オブジェクトを返します。 もしデータベースサーバーが文を準備できなかった場合、 PDO::prepare() は FALSE を返すか PDOException を発行します (エラー処理 の方法に依存します)。

$result = $pdo->prepare('update words set word=?, sense=?, memo=? where id=?'); if ($result) { $result->execute(array(h($_POST['word']),h($_POST['sense']),h($_POST['memo']),$_POST['id'])); }

また、以下のように一度$resultに受けておくと同じSQLで複数execute()したい場合にも対応可能です。

$result = $pdo->prepare('update words set word=?, sense=?, memo=? where id=?'); if ($result) { $result->execute(array(h($_POST['word']),h($_POST['sense']),h($_POST['memo']),$_POST['id'])); $result->execute(/* ...略... */); }

PDOExceptionがthrowされる設定でかつexecute()が1回のみであれば1行に書いても動作上は問題ありません。
※1行の記述が長くなるので私は一度$resultに受けます。

$pdo->prepare('update words set word=?, sense=?, memo=? where id=?')->execute(array(h($_POST['word']),h($_POST['sense']),h($_POST['memo']),$_POST['id']));

投稿2017/02/24 03:51

編集2017/02/24 03:54
Y.H.

総合スコア7914

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

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

0

変数($result)にわざわざ代入する

マニュアル参照
ここでいう$resultはPDOStatementです。
ステートメントのexecuteメソッドを実行しているだけです。
なおDB登録時にはなるべく生データを入れたほうがいいので
h()をかませないほうがいいですね
h()が必要になるのはhtmlへの出力時です。

投稿2017/02/24 03:45

yambejp

総合スコア114767

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問