QA@IT

インサートしたいけど、できない。

12781 PV

7/24 14:55 追記(1)
$pdo->prepareではなく$dbh->prepareにし、INSERTの後にINTOを記入したら、下記のように表示されました。

接続しました。ERROR:SQLSTATE[3D000]: Invalid catalog name: 1046 No database
selected

php.pdoというファイルを作り、localhost/php.pdoでアクセスすると「接続しました」とだけ表示されます。phpmyadminにデータを挿入したいのですが、現段階で何が足りていないのでしょうか。personlというデータベースのfriendというテーブルにデータを挿入したいです。ご教示のほど宜しくお願いします。

<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', 'root');
define('DB_NAME', 'personal');

// エラー表示設定:通知系以外全て表示    
error_reporting(E_ALL & ~E_NOTICE);

try {

$dbh = new PDO('mysql:'.DB_NAME.';'.DB_HOST, DB_USER, DB_PASSWORD);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
print('接続しました。');
>             
//SQL文を作る(新規レコード追加)
 $sql = "INSERT friend(name,price) VALUES
(‘フライドポテト’,100),
('タコス’,200),
(‘フライドチキン’,300)";
//プリペアドステートメントを作る
$stm = $pdo->prepare($sql);
//SQL文を実行
$stm->execute();           
}
catch(PDOException $e){
print('ERROR:'.$e->getMessage());
exit;
}
?>

__________2018-07-24_14.21.22.png

回答

http://php.net/manual/ja/pdo.connections.php

例1 MySQL への接続

```
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>
```

ですので、エラーメッセージも鑑みると

$dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD);

とした方がいいのでは。

//SQL文を作るの前の行の > が不要ではないかと、 $sqlへの代入の途中で改行しているのが気になります。

何か参考にして練習していると思いますが、特に文字列関係は確実に同じになるように気をつけた方がいいと思います。

慣れるまではいきなりデータベースにつながずに、文字列だけ生成して画面に出力して自分の目的通りの文字列になっているか確認するのも重要です。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。