Я пытаюсь сохранить 3 значения данных в базе данных mysql, используя PHP PDO, это всего лишь 3 строки: имя, имя пользователя, пароль. и получил эту фатальную ошибку.
Неустранимая ошибка: разрешенный размер памяти 536870912 байт исчерпан (попытка выделить 262144 байта) в D:\xampp\htdocs\fiverr\order-management-system\classes\contr\UserContr.class.php в строке 13
Мой текущий лимит данных php.ini = ; Максимальный объем памяти, который может потреблять скрипт (128 МБ) ; http://php.net/memory-limit memory_limit=512M
// User Modal-------------------------------
<?php
require_once "Dbcon.php";
class User extends Dbcon{
//check table is empty
protected function if_tableEmpty(){
$sql = "SELECT * FROM user_login";
$stmt = $this->connect()->query($sql);
$result = $stmt->rowCount();
if ($result > 0){
return false;
}else{
return true;
}
}
//check username is already exist
protected function username_exists($username){
if ($this->if_tableEmpty() != true){
$this->username = $username;
$sql = "SELECT username FROM user_login WHERE username = ?";
$stmt = $this->connect()->prepare($sql);
$stmt->execute([$this->username]);
$result = $stmt->rowCount();
return $result;
}else{
return 0;
}
}
// User Insert
protected function setUser($name, $username, $password, $type, $status){
$this->name = $name;
$this->username = $username;
$this->password = $password;
$this->type = $type;
$this->status = $status;
$sql = "INSERT INTO user_login(name, username, password, type, status) VALUES(?,?,?,?,?)";
$stmt = $this->connect()->prepare($sql);
$insert = $stmt->execute([$this->name, $this->username, $this->password, $this->type, $this->status]);
if ($insert == true){
return true;
}else{
return false;
}
}
}
// User Controller-------------------------------
require_once "./classes/modal/User.class.php";
class UserContr extends User{
// check username exists
public function username_exists($username){
$this->username = $username;
$result = $this->username_exists($this->username);
if ($result > 0){
return true;
}else{
return false;
}
}
// create marketer
public function create_marketer($name, $username, $password){
if ($this->username_exists($username) == false){
$password = password_hash($password, PASSWORD_DEFAULT);
$type = 'marketer';
$status = 'active';
$result = $this->setUser($name, $username, $password, $type, $status);
if ($result == true){
return true;
}else{
return false;
}
}else{
return 1;
}
}
}
//Posting php file in includes folder
<?php
if (isset($_POST['submit'])){
$name = $_POST['name'];
$username = $_POST['username'];
$password = $_POST['password'];
$confirm_password = $_POST['confirm_password'];
if (!empty($name) && !empty($username) && !empty($password) && !empty($confirm_password)){
if ($confirm_password != $password){
$alert = '<div class = "alert alert-danger alert-dismissible fade show" role = "alert">
<strong><i class = "fas fa-info"></i> Password Not Match!</strong> Confirm Password not matched try again.
<button type = "button" class = "close" data-dismiss = "alert" aria-label = "Close">
<span aria-hidden = "true">×</span>
</button>
</div>';
echo $alert;
}else{
$result = $marketer->create_marketer($name, $username, $password);
if ($result == true){
$alert = '<div class = "alert alert-danger alert-dismissible fade show" role = "alert">
<strong><i class = "fas fa-check"></i> Success!</strong> Marketer created successfully.
<button type = "button" class = "close" data-dismiss = "alert" aria-label = "Close">
<span aria-hidden = "true">×</span>
</button>
</div>';
echo $alert;
}elseif ($result == false){
$alert = '<div class = "alert alert-danger alert-dismissible fade show" role = "alert">
<strong><i class = "fas fa-info"></i> Failed!</strong> Marketer creating failed try again. If this error persists, please contact the developer.
<button type = "button" class = "close" data-dismiss = "alert" aria-label = "Close">
<span aria-hidden = "true">×</span>
</button>
</div>';
echo $alert;
}elseif ($result == 1){
$alert = '<div class = "alert alert-danger alert-dismissible fade show" role = "alert">
<strong><i class = "fas fa-info"></i> Try Again!</strong> Marketer username already exist please try another username.
<button type = "button" class = "close" data-dismiss = "alert" aria-label = "Close">
<span aria-hidden = "true">×</span>
</button>
</div>';
echo $alert;
}
}
}
}
?>
это первый раз, когда получил эту ошибку. Я работал над большим количеством проектов с PHP PDO, и у меня никогда не было этой ошибки раньше. я пытался исправить изменение php.ini разных memory_limits, но не исправлено. на это потрачено 2 дня. пожалуйста, помогите мне исправить это. Спасибо!
Да, я могу. я отредактировал вопрос, пожалуйста, проверьте. Спасибо!
Объем памяти не проблема; проблема в том, что что-то его поглощает. Могут быть задействованы рекурсия или двоичные данные. Дважды проверьте, что запрос работает за пределами php, попробуйте вставлять по одному элементу за раз, а затем добавляйте переменные, пока он не сломается. Могу поспорить, что проблема либо в запросе, либо в данных.
262144 подозрительно круглое число
а что за строка 13 точно?
Прежде всего, дайте нам полный класс, чтобы мы могли смотреть на линии. Во-вторых, проверьте, хорошо ли вы редактируете файл php.ini. У вас есть цикл, в котором вы сохраняете данные в строку или массив? Каково время выполнения вашего скрипта?
1.['Тим Мортон' Спасибо, попробую! ] 2[ Здравый смысл — это строка 13 $stmt = $this->connect()->query($sql); спасибо!] 3[Ivijan Stefan Stipic, я отредактировал вопрос, пожалуйста, проверьте, спасибо]
Спасибо всем, кто пытался помочь мне решить эту проблему. Во всяком случае я нашел проблему. Это моя ошибка: я использовал одно и то же имя метода внутри UserView.class.php и User.class.php. Имя метода username_exists. Вот проблемный код.
//this is the method in modal class
protected function username_exists($username){
if ($this->if_tableEmpty() != true){
$this->username = $username;
$sql = "SELECT username FROM user_login WHERE username = ?";
$stmt = $this->connect()->prepare($sql);
$stmt->execute([$this->username]);
$result = $stmt->rowCount();
return $result;
}else{
return 0;
}
}
//This is the method in Controller class
public function username_exists($username){
$this->username = $username;
$result = $this->username_exists($this->username);
if ($result > 0){
return true;
}else{
return false;
}
}
Еще раз спасибо всем вам!
так это была рекурсия
Можете ли вы показать
username_exists
код метода?