説明が苦手なのですが、久しぶりに答えが出ないのがわかります。 PDOを使用して値を挿入するための基本的なクラスを作成しました。正しい方向を示してくれることを願っています。また、役立つリンクをいくつか紹介します。
まず接続します。
クラスですでに接続を行っていることがわかりますが、以下が適切な最良のpdo接続です。
$host = '127.0.0.1';
$db = 'YourDatabase';
$user = 'YourDBUser';
$pass = 'YourDBPass';
$charset = 'utf8';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$dbh = new PDO($dsn, $user, $pass, $opt);
これが、適切なPDO接続を設定する方法です。 DNS データソース名の略です 上記の
では、どのようにしてそのつながりをクラスと一緒にまとめますか?
さて、pdoClass.phpを収集するファイルを作成し、そのクラスから作業します。
<?php
class Connection
{
private $host = "127.0.0.1";
private $dbName = "YourDB";
private $user = "YourUser";
private $pass = "YourPass";
private $charset = 'utf8';
private $dbh;
private $error;
private $stmt;
//connection
public function __construct()
{
$dsn = "mysql:host=" . $this->host . ";dbname=" . $this->dbName . ";charset=" . $this->charset;
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false
);
try {
// setup connection
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
}
//catch any errors
catch (PDOException $e) {
$this->error = $e->getMessage();
}
}
//prepare statement
public function insertUserValues($query)
{
$this->stmt = $this->dbh->prepare($query);
}
//bind values
public function bind($param, $value, $type = null)
{
if (is_null($type)) {
switch (true) {
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}
//actual value binding
$this->stmt->bindValue($param, $value, $type);
}
//execute statement
public function run()
{
return $this->stmt->execute();
}
}
?>
基本的に、データベースとデータベースに挿入する関数を設定するために必要なのはこれだけです。いくつかのセクションにコメントを付けようとしました。
このクラスを使用するには、index.phpまたは好きなものを作成します。次に、クラスを含めます
<?php
include'pdoClass.php';
$users = new Connection();
$users->insertUserValues('INSERT INTO test (name, age, description) VALUES(?,?,?)');
$users->bind(1, 'User'); //bind each value
$users->bind(2, 391); // bind
$users->bind(3, 'This is a value');
if($database->run()){
echo "record inserted";
}
?>
完了しました。ご不明な点がある場合や、説明が必要な場合は、以下にコメントしてください。できる限りサポートさせていただきます。
編集: 結果を取得する必要がある場合は、クラスに新しい関数を作成することもできます。
単一行:
public function SingleRow(){
$this->run();
return $this->stmt->fetch();
}
fetch();
を使用していることを確認してください 1行のみをフェッチします。ほとんどの人は、結果をフェッチするときに、このfetch(PDO::FETCH_ASSOC)
のように結果をフェッチします。 ただし、適切な接続を行い、接続でデフォルトのフェッチモードを定義したため、fetch()
を使用できるすべてのものは必要ありません。;
これらの結果をindex.phpファイルに表示するには、次のようにします:
$users->insertUserValues("SELECT name, age, description FROM test WHERE name = :name");
$users->bind(':name','joe');
$row = $users->SingleRow();
echo '<pre>';
print_r($row);
echo '</pre>';
'; これにより、joeの結果が配列として表示されます。
dbからすべての結果を取得するには
すべての結果を表示する別の機能を実行します。
public function All(){
$this->run();
return $this->stmt->fetchall();
}
fetchall()
を使用するようになりました。 すべての結果が必要だからです。
$users->insertUserValues("SELECT * FROM test");
$row = $users->All();
echo '<pre>';
print_r($row);
echo '</pre>';
';