Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MySQL数据库获取数据的通用PHP函数_Php_Mysql_Mysqli - Fatal编程技术网

从MySQL数据库获取数据的通用PHP函数

从MySQL数据库获取数据的通用PHP函数,php,mysql,mysqli,Php,Mysql,Mysqli,我正在创建一个web应用程序,它严重依赖于使用PHP从MySQL获取数据。在大约50个函数中,我有非常相似的代码从MySQL请求单个数据值: function get_profile_picture($whatmember) { global $connection; $whatmember = mysql_prep($whatmember); $query = "SELECT picture_location FROM members WHERE member_id={

我正在创建一个web应用程序,它严重依赖于使用PHP从MySQL获取数据。在大约50个函数中,我有非常相似的代码从MySQL请求单个数据值:

function get_profile_picture($whatmember) {
    global $connection;
    $whatmember = mysql_prep($whatmember);
    $query = "SELECT picture_location FROM members WHERE member_id={$whatmember} LIMIT 1";
    $returnval = mysqli_query($connection,$query);
    if(!$returnval) {
        return "Query failed: " . mysqli_error($connection);
    }
    if(mysqli_num_rows($returnval) > 0 ) {
        $row = mysqli_fetch_assoc($returnval);
        return $row["picture_location"];
    }
    return false;
}
所以我的问题是:是否有一种通用且安全的方法来生成函数,这样我就可以从what-database.what-table what-criteria=什么值允许结果数组和单个值?我尝试了以下方法,但它显然是一种只获取单个值的hack-and-slash方法:

function get_single_value($database_name,$column_name,$table_name,$criteria,$criteria_value) {
    $database_name = mysql_prep($database_name);
    $column_name = mysql_prep($column_name);
    $table_name = mysql_prep($table_name);
    $criteria = mysql_prep($criteria);
    $criteria_value = mysql_prep($criteria_value);

    if(!empty($column_name) && !empty($table_name) && !empty($criteria) && !empty($database_name)) {
        global $connection;
        global $gamesconnection;
        global $locationconnection;

        if($database_name=="connection") {
            $database_connection = $connection;
        } else if ($database_name=="games") {
            $database_connection = $gamesconnection;
        } else if ($database_name=="locations") {
            $database_connection = $locationconnection;
        } else {
            die("Database connection doesn't exist for {$database_name}.");
        }
        $query = "SELECT {$column_name} FROM {$table_name} WHERE {$criteria}='{$criteria_value}' LIMIT 1";
        $result = mysqli_query($database_connection,$query);
        if(!$result) {
            die("Unable to get {$column_name} from {$table_name}. Error: " . mysqli_error($database_connection) . " Query: " . $query);
        }
        if(mysqli_num_rows($result)>0) {
            $row = mysqli_fetch_assoc($result);
            return $row[$column_name];
        }
    }
    return false;
}
我的get_profile_picture函数将更像这样:

function get_profile_picture($whatmember) {
    return get_single_value("connection","picture_location","members","member_id",$whatmember);
}

我对PHP和MySQL还是相当陌生的,所以任何改进我的代码的指针都会很好。提前谢谢

好吧,我自己写的。它可能没有PDO的所有安全性,但我没有学习其他框架来使用它

function get_from_database($database_variable) {
    //PASS IN $database_variable WHICH IS AN OBJECT CONTAINING THE FOLLOWING POSSIBLE VALUES
    $database_name = $database_variable["database_name"]; //DATABASE NAME
    $column_name = $database_variable["column_name"]; //COLUMN(S) BEING REQUESTED
    $table_name = $database_variable["table_name"]; //TABLE BEING SEARCHED
    $criteria = $database_variable["criteria"]; // 'WHERE X'
    $limit = $database_variable["limit"]; //ANY LIMITS, IF REQUIRED
    $group_by = $database_variable["group_by"]; //ANY GROUPING, IF REQUIRED
    $order_by = $database_variable["order_by"]; //ANY SORT ORDERING, IF REQUIRED
    if(!empty($column_name) && !empty($table_name)&& !empty($database_name)) {
        global $connection;
        global $gamesconnection;
        global $locationconnection;
        global $olddataconnection;

        if($database_name=="connection") {
            $database_connection = $connection;
        } else if ($database_name=="games") {
            $database_connection = $gamesconnection;
        } else if ($database_name=="locations") {
            $database_connection = $locationconnection;
        } else if ($database_name=="olddata") {
            $database_connection = $olddataconnection;
        } else {
            error_log("\nDatabase connection doesn't exist for {$database_name}." . get_backtrace_info());
            return false;
        }
        if(is_null($limit)) {
            //IF LIMIT NOT SUPPLIED, MAKE LIMIT 0, IE NO LIMIT
            $limit = 0;
        }
        if(is_int($limit)==false) {
            //NOT AN INTEGER
            error_log("\nError in limit provided: " . $limit . get_backtrace_info());
            return false;
        }
        $query = "  SELECT {$column_name} 
                    FROM {$table_name} " . (!empty($criteria) /*CHECK IF CRITERIA WAS REQUIRED*/ ? " 
                    WHERE {$criteria} " : "") . (!empty($group_by) /*CHECK IF GROUP BY WAS REQUIRED*/ ? " 
                    GROUP BY {$group_by} " : "") . (!empty($order_by) /*CHECK IF ORDER BY WAS REQUIRED*/ ? "
                    ORDER BY {$order_by} " : "") . ($limit!==0 /*CHECK IF LIMIT WAS REQUIRED*/ ? "
                    LIMIT {$limit} " : "");

        $result = mysqli_query($database_connection,$query);
        if(!$result) {
            error_log("\nUnable to process query, got error: " . mysqli_error($database_connection) . "\nQuery: " . $query . get_backtrace_info());
            return false;
        }
        if(mysqli_num_rows($result)>0) {
            //RESULT SUPPLIED
            $row_array = array();
            while($row = mysqli_fetch_assoc($result)) {
                $row_array[] = $row;
            }
            mysqli_free_result($result);
            return $row_array;
        }
    }
    return false;
}
要跟踪函数回调到源的函数:

function get_backtrace_info(){
    //GET INFORMATION ON WHICH FUNCTION CAUSED ERROR
    $backtrace = debug_backtrace();
    $backtrace_string = "";
    for($i=0;$i<count($backtrace);$i++) {
        $backtrace_string .= '\n';
        if($i==0) {
            $backtrace_string .= 'Called by ';
        } else {
            $backtrace_string .= 'Which was called by ';
        }
        $backtrace_string .= "{$backtrace[$i]['function']} on line {$backtrace[$i]['line']}";
    }
    return backtrace_string;
}
要求的2个值:

function get_profile_picture($whatmember) {
    $linked_member_code = get_linked_member_code($whatmember);
    return get_from_database([  "database_name" => "connection",
                                "column_name"   => "picture_location",
                                "table_name"    => "members",
                                "criteria"      => "linked_member_code='{$linked_member_code}' AND team_id=0",
                                "limit"         => 1
                            ])[0]["picture_location"];
}
function get_city_and_region_by_id($whatid) {
    $row = get_from_database([  "database_name" => "locations",
                                "column_name"   => "city, region",
                                "table_name"    => "cities",
                                "criteria"      => "row_id={$whatid}",
                                "limit"         => 1
                            ]);
    return $row[0]["city"] . ", " . $row[0]["region"];
}
未知行数:

function get_linked_teams($linkedmembercode) {
    return get_from_database([  "database_name" => "connection",
                                "column_name"   => "team_id",
                                "table_name"    => "members",
                                "criteria"      => "linked_member_code='{$linkedmembercode}' AND team_id!=0"
                            ]);
}   

我不知道你是什么意思,你有什么建议吗?你的想法不是什么新鲜事,已经完成了。因此,与其重新发明轮子……PDO不是比mysqli更好吗?我同意这不是什么新鲜事,你能告诉我一些已经做过的事情吗?我还没有找到任何从MySQL中提取数据的通用PHP函数的好版本。