Во-первых, вам не нужно делать все .=
конкатенации, которая затем упрощает чтение запроса.
Во-вторых, вы не можете использовать двойные кавычки внутри строки с двойными кавычками, поскольку это завершает строку с двойными кавычками, поэтому используйте $_SESSION['username']
с одинарными кавычками.
В-третьих, я думаю, что хотя бы одно из имен ваших столбцов является зарезервированным словом MYSQL, поэтому, если есть сомнения, оберните имена столбцов в обратные ссылки.
Также неплохо было вывести реальную ошибку базы данных в сообщение об ошибке, по крайней мере, пока вы находитесь в разработке.
public function save($filename, $type, $size){
global $connect;
$sql = "INSERT INTO photograph (
`filename`, `type`, `size`, `caption`)
VALUES ('{$filename}', '{$type}', '{$size}',
'{$_SESSION['username']}')";
$result = mysqli_query($connect, $sql);
if(!$result){
echo "Querying failed". mysqli_error($connect);
}
}
И, наконец, делает запрос таким образом открывает вам до проблем SQL инъекций, поэтому постарайтесь использовать подготовленные заявления, как этот
public function save($filename, $type, $size){
global $connect;
$sql = "INSERT INTO photograph (
`filename`, `type`, `size`, `caption`)
VALUES (?,?,?,?)";
$stmt = mysqli_prepare($sql);
mysqli_stmt_bind_param($stmt, "ssis",
$filename, $type,
$size, $_SESSION["username"]);
$result = mysqli_stmt_execute($connect, $stmt);
if(!$result){
echo "Querying failed". mysqli_error($connect);
}
}
Наконец, это плохая практика, чтобы использовать global
в классе как это разрушает инкапсуляцию. Вместо того, чтобы передать $connect
в этом случае в качестве параметра этого метода или еще лучше, если этот класс это нужно сделать это переменная класса
class whatever
{
public $connect
public function __construct($db_connection)
{
$this->connect = $db_connection;
}
public function save($filename, $type, $size){
$sql = "INSERT INTO photograph (
`filename`, `type`, `size`, `caption`)
VALUES (?,?,?,?)";
$stmt = mysqli_prepare($this->connect,$sql);
mysqli_stmt_bind_param($stmt, "ssis",
$filename, $type,
$size, $_SESSION["username"]);
$result = mysqli_stmt_execute($stmt);
if(!$result){
echo "Querying failed " . mysqli_error($this->connect);
}
}
}
Это потому, что ваши цитаты повсюду, и вы используете по крайней мере один [Ключевое слово MySQL] (https://dev.mysql.com/doc/refman/5.5/en/keywords.html) в качестве имени столбца. Вы должны проверить все ваши запросы и никогда не предполагать, что запрос будет работать. –
У вас есть 'session_start()' в начале скрипта? – Barmar