2017-01-06 3 views
0

Я делаю простой интернет-магазин для моего университетского проекта, который использует две таблицы из базы данных (пользователи и элементы). Я пытаюсь вставить в базу данных некоторую информацию о конкретном элементе. Последний столбец - это идентификатор зарегистрированного пользователя. Я делаю запрос, получая из таблицы «users» идентификатор фактически зарегистрированного пользователя. Когда я использую эту переменную ($ lastlogin), печать через echo показывает правильное значение. К сожалению, когда я пытаюсь вставить идентификатор в «элементы» таблицы с запросом на вставку, вместо правильного значения (например, 5) появляется 0. Кто-нибудь знает, как исправить мою проблему? Я буду благодарен.Вставьте правильное значение в таблицу базы данных вместо 0

$idlogin = "SELECT id FROM users WHERE login=:login"; 
$query = $db->prepare($idlogin); 

$query->bindParam(":login", $_SESSION['login']); 
$query->execute(); 
$row = $query->fetch(PDO::FETCH_ASSOC); 
$lastlogin = $row["id"]; 

$sql = "INSERT INTO `items` VALUES (NULL, :name, :description, :cust_id)"; 
$params = [ ":name" => trim($_POST["name"]), 
      ":description" => trim($_POST["description"]), 
      ":cust_id" => '$lastlogin']; 
$query = $db->prepare($sql); 
$query->execute($params); 
+0

Есть ли несколько строк с одинаковым значением входа, но с разными идентификаторами пользователя? –

+0

вы пробовали 'var_dump ($ lastlogin)', чтобы убедиться, что идентификатор пользователя определенно извлекается? – scottevans93

+0

@SteveKnau - Нет, каждый логин уникален, я сделал проверку псевдонима в скрипте регистрации;) – Michal

ответ

2

Вы не должны ставить $lastlogin кавычки в ваших Params. Если вы это сделаете, mysql увидит это как строку со значением "$lastlogin". Mysql не сможет разобрать это целое число и вместо этого добавить значение 0.

$params = [ 
    ":name" => trim($_POST["name"]), 
    ":description" => trim($_POST["description"]), 
    ":cust_id" => $lastlogin 
]; 
+0

Спасибо за ответ. Прогресс. Теперь запрос вставляет NULL, как будто переменная не сохраняет значение. – Michal

0

Хорошо, спасибо всем, кто пытался помочь мне

Я нашел подсказку в ответ Майкл Берковский на this thread $ lastlogin был инициализирован только в первый раз, так что я положил его в $ _SESSION [» lastlogin '] и вызвать его в sql-запросе.

$idlogin = "SELECT id FROM users WHERE login=:login"; 
$query = $db->prepare($idlogin); 
$query->bindParam(":login", $_SESSION['login']); 
$query->execute(); 
$row = $query->fetch(PDO::FETCH_ASSOC); 
$lastlogin = (int)$row["id"]; 
$_SESSION['lastlogin'] = $lastlogin; 

$sql = "INSERT INTO items VALUES (NULL, :name, :description, :cust_id)"; 

$params = [ 
    ":name" => trim($_POST["name"]), 
    ":description" => trim($_POST["description"]), 
    ":cust_id" => $_SESSION['lastlogin'] 
]; 
$query = $db->prepare($sql); 
$query->execute($params); 

Теперь все отлично работает. Еще раз спасибо за ваше время.

Смежные вопросы