Получать значения из базы данных с помощью PHP PDO и обновлять ввод для проверки

У меня самое сложное время получить результаты, которые я хочу. Я провел много исследований, и я просто не понимаю. Я очень новичок в этом, но сделал свое исследование, прежде чем публиковать этот вопрос.

Итак, у меня есть таблица с этими столбцами: user_id, my_music, my_movies, my_weather, my_maps и my_news

В каждом столбце, кроме user_id, будет либо 1, либо 0. Что мне нужно сделать, это узнать значение, хранящееся в базе данных для каждого столбца для конкретного пользователя.

Вот что я до сих пор. Это мой config.php:

// These variables define the connection information for your MySQL database $username = "dbo12345"; $password = "xxxxxx"; $host = "db12345.db.123.com"; $dbname = "db12345"; $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); try { $db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); } catch(PDOException $ex){ die("Failed to connect to the database: " . $ex->getMessage());} $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); header('Content-Type: text/html; charset=utf-8'); session_start(); 

Вот мой файл admin.php:

 require("config.php"); if(empty($_SESSION['user'])) { header("Location: index.php"); die("Redirecting to index.php"); } $userid = $_SESSION['user']['id']; $sql = "SELECT my_music, my_movies, my_weather, my_maps, my_news FROM user_preferences WHERE user_id = :userID"; //Note the removed semi-colon that was probably causing your error $stmt = $db->prepare($sql); $stmt = $db->bindParam(":userID", $userid); $userid = $_SESSION['user']['id']; $sql = "SELECT my_music, my_movies, my_weather, my_maps, my_news FROM user_preferences WHERE user_id = :userID"; //Note the removed semi-colon that was probably causing your error $stmt = $db->prepare($sql); $stmt->bindParam(":userID", $userid, PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetch(); if ($result['my_music']) { $musicChecked = 'checked="checked"'; } else { $musicChecked = ''; } if ($result['my_movies']) { $checked = 'checked="checked"'; } else { $checked = ''; } 

Как я могу написать выше код по-другому? Я знаю, что есть способ, и мне трудно найти его.

На основании вышеизложенных результатов мне нужно обновить некоторые флажки, например, если my_music – 1 в базе данных, установите флажок для проверки. Поэтому я делаю это:

 <input type="checkbox" name="mymusic" id="mymusic" <? echo $musicChecked;?> /> <input type="checkbox" name="mymovies" id="mymovies" <? echo $moviesChecked;?> /> 

Если мне нужно добавить дополнительную информацию, пожалуйста, дайте мне знать. Всем приветствуется всяческая помощь.

Вы были очень близки, вы не получили должным образом:

 require("config.php"); if(empty($_SESSION['user']['id'])) { header("Location: index.php"); die("Redirecting to index.php"); } $userid = $_SESSION['user']['id']; $sql = "SELECT my_music, my_movies, my_weather, my_maps, my_news FROM user_preferences WHERE user_id = :userID"; $stmt = $db->prepare($sql); $stmt->bindParam(":userID", $userid); $stmt->execute(); $result = $stmt->fetch(); 
  • Вы привязываете Params к объекту утверждения не к соединению
  • Вы также получаете сообщение, а не соединение
  • fetchAll возвращает 2-мерный массив, если вы хотите, чтобы содержимое использовало var_dump not echo

 <input id="mymusic" type="checkbox" name="mymusic" <?php echo ($result['my_music']==1 ? 'checked' : '');?> /> <input id="mymovies" type="checkbox" name="mymovies" <?php echo ($result['mymovies']==1 ? 'checked' : '');?> /> 

user_id не может быть числом, не так ли? Так что поставьте это между '. И у вас есть точка с запятой в конце вашего запроса. Новый запрос будет выглядеть следующим образом:

 $query = "SELECT my_music, my_movies, my_weather, my_maps, my_news FROM user_preferences WHERE user_id = '".$userid."'"; 

Это может быть точка с запятой в конце $ userid в запросе. Не нужно.

Могу ли я также взглянуть на PDO, поскольку он намного безопаснее, а функции mysql_ * устаревают?

Edit: Просто заметили, что вы спросили о PDO, так что вот краткое руководство.

 $user = "root"; $pass = ""; $conn = new PDO('mysql:host=localhost;dbname=SCHEMA;', $user, $pass); $sql = "SELECT my_music, my_movies, my_weather, my_maps, my_news FROM user_preferences WHERE user_id = :userID"; //Note the removed semi-colon that was probably causing your error $stmt = $conn->prepare($sql); $stmt->bindParam(":userID", $userid); $result = $stmt->fetchAll(); //or $stmt->fetch(); if one line echo $result['my_music']; //replace my_music with the column name result you need