【问题标题】:Get values from database using PHP PDO and update input to checked使用 PHP PDO 从数据库中获取值并将输入更新为选中
【发布时间】:2014-10-19 21:25:18
【问题描述】:

我很难获得我想要的结果。我已经做了很多研究,但我就是不明白。我对此很陌生,但在发布这个问题之前做了我的研究。

好的,所以我有一个包含这些列的表: 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;?> />

如果我需要添加更多信息,请告诉我。非常感谢任何和所有帮助。

【问题讨论】:

  • 使用die(mysql_error()); 打印实际错误,这将为您提供线索。也许查询末尾的; 是罪魁祸首。
  • 我将它添加到我的代码中并收到此错误Can't connect to local MySQL server through socket '/tmp/mysqld.sock' (2)
  • 您的 mySql 服务器是否已启动并正在运行?您可以使用任何其他客户端(如 MySqlWorkbench)连接到服务器吗?
  • 听起来您要么没有运行 mysql,要么某些应用程序(例如 Skype)阻止了 mysql 使用的端口。
  • @iamthestreets 在下面看到我的回答

标签: php mysql sql database pdo


【解决方案1】:

你真的很接近,你没有正确获取:

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 返回一个二维数组,如果你想查看内容使用var_dump 而不是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' : '');?>
/>

【讨论】:

  • 这没有显示任何内容,但我认为这是因为它返回了一个不正确的 NULL 值,因为为 my_music 存储的数据库值是 1
  • @iamthestreets 哦,天哪,我刚刚注意到你从来没有执行过它$stmt-&gt;execute();检查我的编辑
  • 你是救生员!我还有一个关于根据数据库中每列的值更新 HTML 输入复选框的问题 - 我应该编辑我原来的问题吗?
  • 是的,您可以使用客户端代码更新您的帖子,或者为此提出新问题,这取决于您。你在用ajax吗?
  • 我更新了上面的帖子。你能看看吗?我没有使用 ajax。
【解决方案2】:

user_id 不能保证是数字,是吗?所以把它放在'.并且您的查询末尾有一个分号。新查询变为:

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

【讨论】:

  • user_id 应该是一个数字,因为这是它在数据库中的存储方式。
【解决方案3】:

它可能是查询中 $userid 末尾的分号。不应该需要。

我是否也可以建议研究一下 PDO,因为它更安全,而且 mysql_* 函数已经过时了?

编辑:刚刚注意到您询问了 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

【讨论】:

  • 是的,我正在研究 PDO,但我没有运气。如果我能得到一些指导或代码示例,我认为这会对我有很大帮助。
  • 大致将你的mysql转换成PDO。未经测试,但应该可以工作。我在顶部添加了连接信息,因为它与您可能习惯的有点不同。
  • @CoreyThompson 如果我需要包含我的连接信息的 config.php,我是否需要添加连接信息?
  • 您不需要,但您需要在 config.php 中设置 $conn 变量,类似于 new PDO(connection info) (因为您正在制作 PDO 类的对象,使用连接信息 - 而不是 MySQL 连接对象...我实际上忘记了旧的 MySQL 函数是如何连接的,但你仍然需要)。
猜你喜欢
  • 2012-04-28
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
相关资源
最近更新 更多