繁体   English   中英

处理时 mysql_query 到 pdo 的转换错误

[英]mysql_query to pdo conversion error on processing

我需要有关将 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;

您在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");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM