Это просто новая форма PDO, которую я не совсем понимаю. Я знаю, что подобные проблемы решались на этом сайте. Но меня привлекла эта новая (новая для меня) классовая система PDO. Это гладко и лаконично. Я со всем разобрался, все динамические пользовательские данные ВСТАВЛЯЮТСЯ в базу данных просто отлично. Однако я не могу понять, как включить lastInsertId(), используя этот конкретный стиль. Пользователь не вводит идентификатор сообщения, и я не могу использовать запрос GET, как я обычно получаю идентификатор сообщения.
То, что у меня есть ниже, после многих неудачных попыток, это лучшее, что я могу сделать. Очевидно, это не работает. Любые исправления в моем коде будут высоко оценены.
Вот класс базы данных:
functions.php
class DB{
private static function connect(){
$pdo = new PDO('mysql:host=localhost;dbname=poetionpics;charset=utf8', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $pdo;
}
public static function query($query, $params = array()){
$stmt = self::connect()->prepare($query);
$stmt->execute($params);
if(explode(' ', $query)[0] == 'SELECT'){
$data = $stmt->fetchALL();
return $data;
}
}
public function lastInsertId(){
$pdo = new PDO('mysql:host=localhost;dbname=poetionpics;charset=utf8', 'root', '');
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
return $pdo->lastInsertId();
}
}
Вот мой код INSERT:
action.php
for($count = 0; $count < count($_POST['hidden_post_title']); $count++){
$post_title = (isset($_POST['hidden_post_title'][$count])) ? strip_tags($_POST['hidden_post_title'][$count]) : NULL;
$post_desc = (isset($_POST['hidden_post_desc'][$count])) ? strip_tags($_POST['hidden_post_desc'][$count]) : NULL;
$newvidurl = (isset($_POST['hidden_vid_url'][$count])) ? strip_tags($_POST['hidden_vid_url'][$count]) : NULL;
$url_1 = (isset($_POST['url1_hidden_id'][$count])) ? strip_tags($_POST['url1_hidden_id'][$count]) : NULL;
$url_2 = (isset($_POST['url2_hidden_id'][$count])) ? strip_tags($_POST['url2_hidden_id'][$count]) : NULL;
DB::query('INSERT INTO cloudbook_posts VALUES (\'\', :post_title, :post_desc)',
array(':post_title'=>$post_title, ':post_desc'=>$post_desc));
//This is possibly problematic code or wrong location....
$postid = DB::lastInsertId('SELECT id FROM cloudbook_posts WHERE id=:id',
array(':id'=>$_POST['id']))[0]['id'];
//End problematic code
DB::query('INSERT INTO vid_info VALUES (\'\', :newvidurl, :postid)',
array(':newvidurl'=>$newvidurl, ':postid'=>$postid));
DB::query('INSERT INTO url_1 VALUES (\'\', :url_1, :postid)',
array(':url_1'=>$url_1, ':postid'=>$post_id));
}
echo str_replace(array('hidden_post_title', 'hidden_post_desc', 'url1_hidden_id', 'url2_hidden_id', '{', '}', '"', ',', ':'), '',
htmlspecialchars(json_encode($result), ENT_NOQUOTES));
?>
Что я получаю в базе данных, это:
vid_info table
id | newvidurl | postid
69 | some user data | 0
Я хочу:
vid_info table
id | newvidurl | postid
69 | some user data | $postid (see action.php for variable value)
[0]['id']
? - person Dharman   schedule 28.08.2019lastInsertId
, но не вставляете, а пытаетесь выбрать. - person Dharman   schedule 28.08.2019$postid = $db->lastInsertId();
или, как вы его использовали,$postid = PDO::lastInsertId()
- person nomistic   schedule 28.08.2019