Database
DB 질의를 위한 몇 가지 헬퍼 함수로 MySQL/MySQLi API를 사용하여 MySQL 및 MariaDB를 지원한다.
WARNING
그누보드는 트랜잭션을 사용하지 않으며 Prepared Statement를 사용하지 않는다. 항상 SQL Injection에 주의해야 한다.
데이터 가져오기
sql_query()
질의문의 실행 후 mysqli_result
객체를 반환(실패 시 null
, boolean
) 한다.
php
/**
* @param string $sql 질의문
* @param bool $error 오류 표시 여부
* @param ?mysqli $link MySQLi 객체
* @return null|bool|mysqli_result
*/
function sql_query($sql, $error = G5_DISPLAY_SQL_ERROR, $link = null);
php
$result = sql_query("SELECT * FROM {$g5['member_table']} WHERE mb_id = 'admin'");
$num_rows = sql_num_rows($result);
$data = sql_fetch_array($result);
sql_fetch()
php
/**
* @param string $sql 질의문
* @param bool $error 오류 표시 여부
* @param ?mysqli $link MySQLi 객체
* @return mixed
*/
function sql_fetch($sql, $error = G5_DISPLAY_SQL_ERROR, $link = null);
sql_fetch_array()
php
/**
* @param mysqli_result $result
* @return mixed
*/
function sql_fetch_array($result);
sql_data_seek()
php
/**
* @param mysqli_result $result
* @param int $offset
*/
function sql_data_seek($result, $offset = 0);
sql_free_result()
php
/**
* @param mysqli_result $result
*/
function sql_free_result($result);
sql_insert_id()
php
/**
* @param ?mysqli $link
*/
function sql_insert_id($link = null);
sql_num_rows()
php
/**
* @param mysqli_result $result
*/
function sql_num_rows($result);
DB 연결
sql_connect()
php
/**
* @param string $host
* @param string $user
* @param string $pass
* @param string $db
*/
function sql_connect($host, $user, $pass, $db = G5_MYSQL_DB);
sql_select_db()
php
/**
* @param string $db
* @param mysqli $connect
*/
function sql_select_db($db, $connect);
sql_set_charset()
php
/**
* @param string $charset
* @param ?mysqli $link
*/
function sql_set_charset($charset, $link=null);
기타
sql_password()
폐기된 함수
이 함수는 더 이상 사용되지 않아야 한다. 취약한 알고리즘을 사용하고 있으며, MySQL 8.0.11 버전부터는 오류를 발생시킨다.
MySQL PASSORD 함수로 생성된 기존 비밀번호를 비교해야 할 때만 사용되어야하며, 새로운 비밀번호 등을 이 함수로 생성하여 사용하지 않아야 한다.
DANGER
이 함수는 MySQL 8.0.11 버전부터 완전히 제거된 기능에 의존하므로 오류를 발생시킨다. 이 문제는 보고되었지만 현재 고쳐지지 않고 있다. 그누보드 이슈 247
MySQL PASSWORD() 함수로 생성된 비밀번호의 hash 값을 반환 한다. MySQL 버전에 따라 다른 결과 값을 반환할 수 있다.
php
/**
* @param string $value
* @return string
*/
function sql_password($value);
sql_field_names()
php
/**
* @param string $table
* @param ?mysqli $link
*/
function sql_field_names($table, $link = null);
sql_error_info()
php
/**
* @param ?mysqli $link
*/
function sql_error_info($link = null);
sql_real_escape_string()
php
/**
* @param string $str
* @param ?mysqli $link
*/
function sql_real_escape_string($str, $link = null);
DANGER
TBD. SQL Injection