Я пытаюсь окунуться в mysql. Может кто-нибудь сказать мне, почему этот запрос mysql не работает? Я получаю следующую ошибку:
Предупреждение: mysqli_error () ожидает ровно 1 параметр, 0 указан в /home/freebet2/public_html/test.php в строке 11
test.php
<?php require_once($_SERVER['DOCUMENT_ROOT'].'/includes/db.php'); $conn = db_connect(); $result = $conn->query("ALTER TABLE users ADD COLUMN refer_old INT(10) AFTER refer_id"); if(!$result){ echo "Error with MySQL Query: ".mysqli_error(); } ?>
db.php
<?php function db_connect() { $result = new mysqli('localhost', 'user', 'password', 'db'); if (!$result) { throw new Exception('Could not connect to database server'); } else { return $result; } } ?>
Если я изменил строку alter на что-то вроде: $result = $conn->query("SELECT * FROM users refer_id");
По какой-то причине я не получаю ошибки.
Что касается ошибки sql, имеет ли «пользователь» разрешение на изменение таблицы?
Вы смешиваете объектно-ориентированные и процедурные стили mysqli API:
Вы используете объектно-ориентированную:
$result = new mysqli('localhost', 'user', 'password', 'db');
И, следовательно, процедурный:
echo "Error with MySQL Query: ".mysqli_error();
Вы должны использовать либо OO, либо процедурный, но не оба; и если вы выберете процедурный, функции ожидают, что идентификатор ссылки передается как параметр.
Например, mysqli_error
следует вызывать либо с использованием объектно-ориентированного API:
$link = new mysqli(...); echo $link->error;
Или процедурный API:
$link = mysqli_connect(...); echo mysqli_error($link);
(Конечно, это не изменит того факта, что у вас возникла ошибка в вашем SQL-запросе, но она позволит вам получить сообщение об ошибке, которое должно помочь найти причину этой ошибки)
Используйте mysqli_error($result)
поскольку mysqli_error ожидает, что соединение будет передано как параметр.