我不是解釋真的很好BRU,但我只看到,有很長一段時間後,沒有回答。我爲你創建了一個基本的類來使用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代表數據源名稱參考上面的https://phpdelusions.net/pdo#dsn這個傢伙解釋的更好。你需要知道的一切。
現在你怎麼把這個連接和你的班級放在一起?
好吧,我將創建一個文件收集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();
只取一排。大多數人在獲取結果時會像這樣獲取它們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>';
這將顯示喬的結果作爲數組。
從我們的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>';
您需要一次提出一個問題。編寫類是一回事,執行準備好的語句是另一個 –
哪一行是24? –
$ query。=「'」。 implode(「','」,array_values($ data))。「')」; – HELPME