データベース操作の関数を使用するときはmysql_*
、データベースへの接続と初期化コードを別のファイルに入れて、他のページに含めていましたが、うまく機能しました。
最近PDOを学んだので、PDOで試してみようと思いました。だから私は4つのPHPファイルを持っています。
config.phpファイルには、データベースに関連するすべての情報が格納されます。
<?php
$host = "localhost";
$username = "root";
$password = "abc123";
$dbname = "blog";
?>
init.phpにはconfig.phpファイルが含まれており、データベース接続を初期化します。
<?php
include_once("config.php");
$db = new PDO('mysql:host=' . $host . ';dbname=' . $dbname, $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>
そして、すべての関数を含むfunctions.phpと呼ばれる別のファイルがあります。init.phpファイルが含まれています。
<?php
include_once("init.php");
function AddCategory($_name)
{
$param = $_name;
$query = $db->prepare("INSERT INTO categories SET name = :name");
$query->bindParam(':name', $param, PDO::PARAM_STR);
$query->execute();
}
function CategoryExists($_name)
{
$param = $_name;
$query = $db->prepare("SELECT COUNT(1) FROM categories WHERE name = :name");
$query->bindParam(':name', $param, PDO::PARAM_STR);
$query->execute();
$results = $query->fetch();
return ($results == '0') ? false : true;
}
?>
そして、小さなフォームを表示するindex.phpファイル。
<?php
include_once("functions.php");
if(isset($_POST['name']))
{
$name = trim($_POST['name']);
if(empty($name))
{
$error = "You must enter a category name";
}
else if (CategoryExists($name))
{
$error = "That category already exists";
}
else if (strlen($name) > 24)
{
$error = "Category name can only be upto 24 characters";
}
if(!isset($error))
{
AddCategory($name);
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Add a Category</title>
</head>
<body>
<h1>Add a Category</h1>
<form action="" method="post">
<div>
<label for="name">Name</label>
<input type="text" name="name" value=""></input>
</div>
<div>
<input type="submit" value="Add Category"></input>
</div>
</form>
</body>
</html>
しかし、何かを入力して送信すると、必要なファイルを含めても、このエラーがスローされます。
誰かが私がここで間違っていることを教えてもらえますか?本当にありがたいです。または、これを達成するためのより簡単/効率的/正しい方法はありますか?
ありがとうございました。