第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用PDO插入/更新輔助函數(shù)

使用PDO插入/更新輔助函數(shù)

翻閱古今 2019-08-13 15:16:35
使用PDO插入/更新輔助函數(shù)我有一個(gè)非常簡(jiǎn)單的輔助函數(shù)來(lái)為傳統(tǒng)的普通mysql驅(qū)動(dòng)程序用法生成SET語(yǔ)句:function dbSet($fields) {   $set='';   foreach ($fields as $field) {     if (isset($_POST[$field])) {       $set.="`$field`='".mysql_real_escape_string($_POST[$field])."', ";     }   }   return substr($set, 0, -2); }像這樣用過$id = intval($_POST['id']);$fields = explode(" ","name surname lastname address zip fax phone");$_POST['date'] = $_POST['y']."-".$_POST['m']."-".$_POST['d'];$query  = "UPDATE $table SET ".dbSet($fields)." stamp=NOW() WHERE id=$id";它使代碼非常干燥,同時(shí)也很靈活。我要問是否有人愿意分享類似的功能,利用PDO預(yù)備語(yǔ)句功能?我仍然懷疑,如何做到這一點(diǎn)。是否有一種直接而簡(jiǎn)單的方法來(lái)使用PDO預(yù)處理語(yǔ)句來(lái)插入數(shù)據(jù)?應(yīng)該是什么形式?查詢構(gòu)建器助手?還是插入查詢助手?它應(yīng)該采取什么參數(shù)?我希望它可以很容易被用作SO的答案。因?yàn)樵诿總€(gè)主題中我們都可以看到預(yù)備語(yǔ)句的使用建議,但是沒有一個(gè)好的例子。真實(shí)的例子,我的意思是。鍵入bind_param()20次并不是一個(gè)好的編程風(fēng)格我相信。甚至還有20個(gè)問號(hào)。
查看完整描述

3 回答

?
慕萊塢森

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

我通常有一個(gè)擴(kuò)展PDO的類,但我的課程非常習(xí)慣。如果我將其清理干凈并進(jìn)行測(cè)試,我會(huì)在以后發(fā)布。但是,這是您系統(tǒng)的解決方案。

function dbSet($fields, &$values) {
    $set = '';
    $values = array();

    foreach ($fields as $field) {
        if (isset($_POST[$field])) {
            $set .= "`$field` = ?,";
            $values[] = $_POST[$field];
        }
    }

    return rtrim($set, ',');}$fields = explode(" ","name surname lastname address zip fax phone date");$_POST['date'] = $_POST['y']."-".$_POST['m']."-"$_POST['d'];$query  = "UPDATE $table SET ".dbSet($fields, $values).", stamp=NOW() WHERE id=?";$values[] = $id;$dbh->prepare($query);$dbh->execute($values);

這可能不完美,可以使用調(diào)整。它考慮了$dbh使用PDO連接設(shè)置。等待我做的任何小的語(yǔ)法問題,這應(yīng)該工作。

編輯

真的,我想我會(huì)選擇Doctrine ORM(或其他ORM)。在設(shè)置模型并在那里添加所有驗(yàn)證時(shí),它就像下面這樣簡(jiǎn)單:

$table = new Table();$table->fromArray($_POST);$table->save();

這應(yīng)該很容易填充內(nèi)容。這當(dāng)然是與ORM,如Doctrine。

更新

做了一些小的調(diào)整,第一個(gè)代碼,如把isset背部和使用rtrimsubstr。開始提供PDO擴(kuò)展類的模擬只需要布局方式來(lái)完成它并進(jìn)行一些單元測(cè)試以確保它有效。


查看完整回答
反對(duì) 回復(fù) 2019-08-13
?
慕斯王

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊

每個(gè)答案都有幫助,我希望我能分開賞金。

最后,令我驚訝的是,基于已接受的答案,我能夠像以前一樣制作它

$fields = array("login","password");$_POST['password'] = MD5($_POST['login'].$_POST['password']);$stmt = $dbh->prepare("UPDATE users SET ".pdoSet($fields,$values)." WHERE id = :id");$values["id"] = $_POST['id'];$stmt->execute($values);

它可以包裝成輔助函數(shù),但我懷疑是否有必要。它只會(huì)將代碼縮短一行。

pdoSet代碼:

function pdoSet($fields, &$values, $source = array()) {
  $set = '';
  $values = array();
  if (!$source) $source = &$_POST;
  foreach ($fields as $field) {
    if (isset($source[$field])) {
      $set.="`$field`=:$field, ";
      $values[$field] = $source[$field];
    }
  }
  return substr($set, 0, -2); }


查看完整回答
反對(duì) 回復(fù) 2019-08-13
?
慕神8447489

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊

我會(huì)擴(kuò)展Core PDO Class和一個(gè)像這樣的方法:

class Database extends PDO{
    public function QueryFromPost($Query,$items)
    {
        $params = array();
        $Query .= ' WHERE ';

        foreach($items as $key => $default)
        {
             $Query .= ' :' . $key. ' = ' . $key;
             if(isset($_POST[$key]))
             {
                  $params[':' . $key] = $_POST[$key];
             }else
             {
                 $params[':' . $key] = $default;
             }
        }
        $s = $this->prepare($Query);
        return $s->execute($params);
    }}

然后像這樣使用

$db = new Database(/*..Default PDO Params*/);$statement = $db->QueryFromPost('SELECT * FROM employees',array('type' => 'plc'));foreach($preparedStatement->fetchAll() as $row){
    //...}

但是,正如已經(jīng)說(shuō)過的那樣,你應(yīng)該非常厭倦你想要做的事情,你需要驗(yàn)證你的數(shù)據(jù),它已被消毒但你沒有經(jīng)過驗(yàn)證。


查看完整回答
反對(duì) 回復(fù) 2019-08-13
  • 3 回答
  • 0 關(guān)注
  • 626 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)