亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

參考:使用MySQL擴展的完美代碼示例是什么?

參考:使用MySQL擴展的完美代碼示例是什么?

MM們 2019-06-14 15:38:28
參考:使用MySQL擴展的完美代碼示例是什么?這是為了創建一個社區學習資源..我們的目標是有好的代碼示例,這些代碼不會重復復制/粘貼PHP代碼中經常出現的可怕錯誤。我已經要求它成為社區維基。這是不是作為編碼比賽。它不是尋找最快或最緊湊的方式來進行查詢-它是提供一個好的,可讀的參考,特別是對新手。每天都有大量的問題涌入真的很糟糕使用mysql_*堆棧溢出的函數族。雖然通常最好將這些人引導到PDO,但有時這既不可能(例如繼承的遺留軟件),也不現實(用戶已經在他們的項目中使用它)。使用mysql_*圖書館包括:SQL注入值限制子句和動態表名中的SQL注入沒有錯誤報告(“為什么這個查詢不能工作?”)錯誤報告(也就是說,即使在代碼投入生產時也會發生錯誤)值輸出中的跨站點腳本(Xss)注入讓我們編寫一個PHP代碼示例,它使用MySQL_*函數族:接受兩個員額值,id(數字)及name(a字符串)對表執行更新查詢tablename,更改name列中具有ID的id如果出現故障,請友好地退出,但只在生產模式中顯示詳細的錯誤。trigger_error()就足夠了;或者使用您選擇的方法。輸出消息“$name最新情況“。而且真的不顯示上面列出的任何弱點。應該是盡可能簡單..理想情況下,它不包含任何函數或類。目標不是創建副本/可壓縮庫,而是創建顯示使數據庫查詢安全所需的最小操作。好的評論加分。這樣做的目的是使這個問題成為一個資源,當用戶遇到一個有錯誤代碼的問題詢問者(盡管它根本不是問題的焦點)或者遇到一個失敗的查詢并且不知道如何解決它時,用戶可以鏈接到這個資源。預先阻止PDO的討論:是的,它往往會更好地指導個人寫這些問題的PDO。當它成為一種選擇時,我們應該這樣做。然而,這并不總是可能的-有時,問題問者正在處理遺留代碼,或者已經有了很長的路要用這個庫,而且現在不太可能改變它。此外,mysql_*如果使用得當,功能家族是完全安全的。所以這里沒有“使用PDO”的答案。
查看完整描述

3 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

我的刺。試著保持它盡可能簡單,同時仍然保持一些現實世界的便利。

處理Unicode,并使用松散比較來實現可讀性。友好點;-)

<?php

header('Content-type: text/html; charset=utf-8');error_reporting(E_ALL | E_STRICT);ini_set('display_errors', 1);
// display_errors can be changed to 0 in production mode to// suppress PHP's error messages/*
Can be used for testing
$_POST['id'] = 1;
$_POST['name'] = 'Markus';
*/$config = array(
    'host' => '127.0.0.1', 
    'user' => 'my_user', 
    'pass' => 'my_pass', 
    'db' => 'my_database');# Connect and disable mysql error output$connection = @mysql_connect($config['host'], 
    $config['user'], $config['pass']);if (!$connection) {
    trigger_error('Unable to connect to database: ' 
        . mysql_error(), E_USER_ERROR);}if (!mysql_select_db($config['db'])) {
    trigger_error('Unable to select db: ' . mysql_error(), 
        E_USER_ERROR);}if (!mysql_set_charset('utf8')) {
    trigger_error('Unable to set charset for db connection: ' 
        . mysql_error(), E_USER_ERROR);}$result = mysql_query(
    'UPDATE tablename SET name = "' 
    . mysql_real_escape_string($_POST['name']) 
    . '" WHERE id = "' 
    . mysql_real_escape_string($_POST['id']) . '"');if ($result) {
    echo htmlentities($_POST['name'], ENT_COMPAT, 'utf-8') 
        . ' updated.';} else {
    trigger_error('Unable to update db: ' 
        . mysql_error(), E_USER_ERROR);}


查看完整回答
反對 回復 2019-06-14
?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

我決定跳過槍放點東西。一開始就是這樣。在錯誤時拋出異常。

function executeQuery($query, $args) {
    $cleaned = array_map('mysql_real_escape_string', $args);

    if($result = mysql_query(vsprintf($query, $cleaned))) {
        return $result;
    } else {
        throw new Exception('MySQL Query Error: ' . mysql_error());
    }}function updateTablenameName($id, $name) {
    $query = "UPDATE tablename SET name = '%s' WHERE id = %d";

    return executeQuery($query, array($name, $id));}try {
    updateTablenameName($_POST['id'], $_POST['name']);} catch(Exception $e) {
    echo $e->getMessage();
    exit();}


查看完整回答
反對 回復 2019-06-14
  • 3 回答
  • 0 關注
  • 382 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號