:::

4-3 用PDO寫入資料庫

一、用PDO寫入資料的方法

  1. 儲存的基本語法(需自行過濾變數,擋掉 SQL injection 隱碼攻擊或 SQL 注入攻擊):
    $sql = "INSERT INTO `資料表` (`欄1`, `欄2`, ...) VALUES('值1', '值2', ...)";
    $pdo->exec($sql);

    關於隱碼攻擊可參考:https://medium.com/@gordonfang_85054/%E8%B3%87%E5%AE%89%E6%BB%B2%E9%80%8F%E6%94%BB%E9%98%B2%E7%AD%86%E8%A8%98-1-c9a6b8ada5fa

  2. 比較安全的 prepare 寫法(會自動處理SQL injection 攻擊),這是使用命名方式:
    $sql = "INSERT INTO `資料表` (`欄1`, `欄2`, ...) VALUES(:欄1,:欄2,...)";
    $stmt = $pdo->prepare($sql);
    $values= [':欄1' => '值1',':欄2' => '值2', ...];
    $stmt->execute($values);

    或更簡單的用 ? 佔位符

    $sql = "INSERT INTO `資料表` (`欄1`, `欄2`, ...) VALUES(?, ?,...)";
    $stmt = $pdo->prepare($sql);
    $values= ['值1', '值2', ...];
    $stmt->execute($values);

    更進一步精簡可寫成

    $stmt = $pdo->prepare('INSERT INTO `資料表` (`欄1`, `欄2`, ...) VALUES(?, ?,...)');
    $stmt->execute(['值1', '值2', ...]);


    為了安全性,我們後續將都直接採用prepare寫法

二、調整我們的寫入語法

  1. 以我們的例子來說,admin.php目前的內容便是:
    // 準備SQL語句
    $sql = "INSERT INTO news (title, content, author, date, category) VALUES (?, ?, ?, ?, ?)";
    
    // 預備語句
    $stmt = $pdo->prepare($sql);
    
    // 綁定參數並執行語句
    $stmt->execute([$title, $content, $author, $date, $category]);
    

     

  2. 由於 media 是設定為 NOT NULL,而且沒有提供預設值,所以,新增時,若是沒有該欄位 ,會有錯誤產生,因此,在寫入時,我們手動加一下該欄位即可:

    // 準備SQL語句
    $sql = "INSERT INTO news (title, content, author, date, category, media) VALUES (?, ?, ?, ?, ?, ?)";
    
    // 預備語句
    $stmt = $pdo->prepare($sql);
    
    // 綁定參數並執行語句
    $stmt->execute([$title, $content, $author, $date, $category, '[]']);

     

  3. 寫入後可以利用 rowCount() 取得受影響的列數是多少,只要大於 0 就是寫入成功

    // 取得插入的資料行數
    $rowCount = $stmt->rowCount();
    
    if ($rowCount > 0) {
        // 取得插入的 id 值
        $lastInsertId = $pdo->lastInsertId();
    
        //上傳檔案
    
        echo "資料插入成功!";
    } else {
        echo "資料插入失敗!";
    }

     

  4. 由於流水號是自動產生,所以,我們可以用 lastInsertId() 去抓取該編號,以方便之後運用,例如儲存完就轉向到該編號頁面。此處,我們會先用編號來建立上傳檔案的子目錄(這樣日後比較好管理)

    // 取得插入的 id 值
    $lastInsertId = $pdo->lastInsertId();

     


:::

書籍目錄

展開 | 闔起

http%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbsn%3D52%26tbdsn%3D1972

計數器

今天: 1572157215721572
昨天: 4745474547454745
總計: 7711533771153377115337711533771153377115337711533