【问题标题】:mysql_query to pdo conversion error on processing处理时 mysql_query 到 pdo 转换错误
【发布时间】:2016-09-18 07:30:22
【问题描述】:

我需要有关将 mysql_query 转换为 PDO 的帮助。当我编辑列时,MySQL 数据库没有更新。我尝试翻译以下代码:

<?php
include("connect.php");
if($_GET['id'] and $_GET['data'])
{
  $id = $_GET['id'];
  $data = $_GET['data'];
  $key = $_GET['key'];
  if(mysql_query("update information set $key='$data' where id='$id'"))
    echo 'success';
  }
} 
?>

进入这个:

<?php
include("connect.php");

if(isset($_GET))    
{
    $id = $_GET['id'];
    $data = $_GET['data'];
    $key = $_GET['key'];
}

try {
    $pdo = new PDO( DSN, DB_USR, DB_PWD );
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->query( "SET NAMES utf8" );
    $stmt = $pdo->prepare(
        "UPDATE information
        SET
        key=:data where id=:id"
    );
    $stmt->bindValue( ':id', $id, PDO::PARAM_INT );
    $stmt->bindValue( ':key', $data, PDO::PARAM_STR );
    $stmt->execute();

} catch (PDOException $e){
    var_dump($e->getMessage());
}
$pdo = null;

【问题讨论】:

  • 你试过的也放了那个代码

标签: php pdo


【解决方案1】:

您在bindValue() 调用中使用了:key,而它应该是:data。您还需要将$key 放入查询中(列名不能使用占位符,因此需要变量替换)。

$stmt = $pdo->prepare(
    "UPDATE information
    SET
    $key = :data where id=:id"
);
$stmt->bindValue( ':id', $id, PDO::PARAM_INT );
$stmt->bindValue( ':data', $data, PDO::PARAM_STR );
$stmt->execute();

您应该在替换之前验证$key,以防止 SQL 注入。比如:

$allowed_keys = array('col1', 'col2', 'col3');
if (!in_array($key, $allowed_keys)) {
    die("Bad key $key");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 2013-10-26
    相关资源
    最近更新 更多