$dbh = dbConnect();
いつもお世話になりありがとうございます。
標記の件。
エラーになります。
どう直せばいいでしょうか?
エラーメッセージは
Fatal error: Uncaught Error: Call to undefined function dbConnect() in C:\xampp\htdocs\blog_create.php:9 Stack trace: #0 {main} thrown in C:\xampp\htdocs\blog_create.php on line 9
です。
コーディングは下記です。
<?php
//require_once('form.html');
require_once('blog.php');
$sql = "INSERT INTO
table_name(name,title,category,content)
VALUES
(:name, :title, :category, :content,)";
$dbh = dbConnect();
$dbh->beginTransaction();
try {
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':id', $blogs['id'], PDO::PARAM_INT);
$stmt->bindValue(':name', $blogs['name'], PDO::PARAM_STR);
$stmt->bindValue(':title', $blogs['title'], PDO::PARAM_STR);
$stmt->bindValue(':category', $blogs['category'], PDO::PARAM_STR);
$stmt->bindValue(':content', $blogs['content'], PDO::PARAM_STR);
$stmt->bindValue(':post_at', $blogs['post_at'], PDO::PARAM_INT);
$stmt->execute();
$stmt->commit();
echo 'ブログを投稿しました!';
} catch (PDOException $e) {
$dbh->rollBack();
exit($e);
}
blog.php
<?php
//require_once('dbc.php');
//<?php
//class Dbc
//{
// protected $table_name;
//protected function dbConnect()
//{
$dsn = 'mysql:host=localhost;dbname=blog_app;charset=utf8';
$user = 'blog_user';
$pass = 'rhythm0!KT';
try {
$dbh = new \PDO($dsn, $user, $pass, [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
]);
} catch (PDOException $e) {
echo '接続失敗' . $e->getMessage();
exit();
};
return $dbh;
//}
function getAll()
{
$dbh = $this->dbConnect();
//①SQLの準備
$sql = "SELECT * FROM $this->table_name";
//②SQLの実行
$stmt = $dbh->query($sql);
//③SQLの結果を受け取る
$result = $stmt->fetchall(\PDO::FETCH_ASSOC);
return $result;
$dbh = null;
}
$dbh = $this->dbConnect();
$sql = "SELECT * FROM $this->table_name";
$stmt = $dbh->prepare("SELECT * FROM $this->table_name Where id = :id");
$stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetch(\PDO::FETCH_ASSOC);
if (!$result) {
exit('本文がありません。');
}
return $result;
//}
//function blogCreate($blogs)
{
$sql = 'INSERT INTO
blog(title, content, category, publish_status)
VALUES
(:title, :content, :category, :publish_status)';
$dbh = $this->dbConnect();
$dbh->biginTransaction;
try {
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':title', $blogs['title'], \PDO::PARAM_STR);
$stmt->bindValue(':content', $blogs['content'], \PDO::PARAM_STR);
$stmt->bindValue(':category', $blogs['category'], \PDO::PARAM_INT);
$stmt->bindValue(':publish_status', $blogs['publish_status'], \PDO::PARAM_INT);
$stmt->execute();
$dbh->commit();
echo 'ブログを投稿しました!';
} catch (PDOException $e) {
$dbh->rollBack();
exit($e);
}
}
function delete($id) {
if (empty($id)) {
exit('idが不正です。');
}
$dbh = $this->dbConnect();
$stmt = $dbh->prepare("DELETE FROM $this->table_name Where id = :id");
$stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT);
$stmt->execute();
echo 'ブログを削除しました!';
return $result;
}
//}
?>
度々申し訳ございません。
教えてください。
ご回答のほど宜しくお願い申し上げます。
お礼
ありがとうございました。 どうやらマニュアルにもかかれているようで、まとめてIN句に指定することができないみたいでした。 http://jp2.php.net/manual/ja/pdo.prepare.php このことから、事前にSQLを組み立てる際に、IN句に利用する値は IN(?, ?, ?) に展開して prepare するようにします。