@kotey

Как грамотно составить функции запросов mysqli?

Доброго времени суток, уважаемые.
Нашел старый код, использующий расширение mysql и попытался переписать его на православном mysqli
И что очень странно, полученный результат даже работает. Что сразу насторожило. Ибо с моими знаниями код превышающий уровень echo "хэлло ворлд!"; и при этом работающий - вещь невероятная и очень подозрительная.
Поэтому и решил спросить знающих людей: "где подвох?". В смысле, неужели вот это и должно работать?
файл: connect.php
define('DB_HOST', 'localhost'); // database host
	define('DB_USER', 'root'); // username
	define('DB_PASS', ''); // password
	define('DB_NAME', 'test'); // database name
	define('DB_CHARSET', 'utf8'); // database charset

файл: function.php
function db_connect($host,$user,$pass,$base) //create connection
{
	$r = mysqli_connect($host,$user,$pass,$base);
    mysqli_set_charset($r, DB_CHARSET);
	return $r;
}
function db_error() //database error message
{
	return mysqli_connect_error();
}
function db_query($link,$sql) //database query
{
	return mysqli_query($link,$sql);
}

файл: test.php
$link =	db_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME) or die (db_error());
	$result = db_query($link,"SELECT * FROM jbi ORDER by ID DESC");
	if ($result)
	{
		while ($row = mysqli_fetch_array($result))
		{
			echo '
			<tr>   
			<td>'.$row['id'].'</td>
			<td>'.$row['name'].'</td>
			<td>'.$row['one'].'</td>
			<td>'.$row['two'].'</td>
			</tr>
			';
		}
		/* очищаем результирующий набор */
		mysqli_free_result($result);
	}
	mysqli_close($link);
  • Вопрос задан
  • 488 просмотров
Пригласить эксперта
Ответы на вопрос 2
Уходите от mysqli_* в сторону PDO. Будет намного легче писать запросы. Да и mysqli_* в php 7 убрали
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Вопрос содержит взаимоисключающие параграфы.
Если задача наговнокодить абы как, лишь бы работало - то зачем спрашивать, как правильно?

Если же задача действительно научиться писать правильно, то надо учить ПДО, просто потому что правильная работа с БД в mysqli ГОРАЗДО сложнее, чем в ПДО.

Для примитивного примера в вопросе действительно разницы никакой. Но как только речь зайдет о добавлении переменных в запрос, то сразу встанет проблема использования подготовленных выражений. Это и само по чебе для новичков сложно, а уж с mysqli их освоить и вовсе задача нереальная. С ПДО гораздо легче. Чтобы начать польззоваться ,надо знать всего три вещи:

1. Все переменные заменяются в запросе на знаки вопроса. после этого делаем запросу prepare
2. Сами переменные запихиваем по порядку в execute
3. После этого запрашиваем у ПДО результат запроса сразу в том виде, в котором они нам нужны

И все. Пример:
$stmt = $pdo->prepare("SELECT id, name, price, amount FROM table WHERE id = ?");
$stmt->execute([$id]);
$row = $stmt->fetch();

Все ОЧЕНЬ просто.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы