【问题标题】:Using PDO to create a mysql query function, wont insert rows使用 PDO 创建 mysql 查询函数,不会插入行
【发布时间】:2010-02-03 23:27:37
【问题描述】:

试图掌握如何使用 PDO,并且我正在使用一些预制函数来简化查询时的操作。第一个连接,第二个运行查询。

不幸的是,它不允许我使用 dbquery() 插入行。 SELECT 工作正常,只是似乎无法让其他任何工作。

代码如下:

function dbConnect() 
  {
  global $dbh;

  $dbInfo['database_target'] = "localhost";
  $dbInfo['database_name'] = "mysqltester";
  $dbInfo['username'] = "root";
  $dbInfo['password'] = "password";

  $dbConnString = "mysql:host=" . $dbInfo['database_target'] . "; dbname=" . $dbInfo['database_name'];
  $dbh = new PDO($dbConnString, $dbInfo['username'], $dbInfo['password']);
  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $error = $dbh->errorInfo();

  if($error[0] != "") 
    {
    print "<p>DATABASE CONNECTION ERROR:</p>";
    print_r($error);
    }
  }

function dbQuery($queryString) 
  {
  global $dbh;

  $query = $dbh->query($queryString);
  $i = 0;

  foreach ($query as $query2) 
    {
    $queryReturn[$i] = $query2;
    $i++;
    }

  if($i > 1) 
    {
    return $queryReturn;
    }
    else
    {
    return $queryReturn[0];
    }
  }

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    PDO::query 仅适用于返回结果集的查询(例如SELECT

    有关插入/更新/删除,请参阅PDO::exec

    如果您要将用户提供的数据插入 DBMS,我强烈建议您使用 PDO 的准备好的语句功能来提供自动转义以防止 SQL 注入。

    例如

    <?php
    $stmt = $dbh->prepare("INSERT INTO tester1 (name, age) VALUES (?, ?)");
    $stmt->execute(array('James',25));
    

    PDO::preparePDOStatement::execute

    【讨论】:

    • 所以使用这样的东西? $dbh->exec("INSERT INTO tester1 (name, age) VALUES ('James', 25)");
    • 是的。尽管我强烈建议在相关时使用准备好的语句,但它们会为您处理转义。我会更新我的答案以反映这一点。
    • 谢谢。准备好的语句防止sql注入?
    • 就其本质而言,Prepared 语句向数据库提交了两件事。首先是语句,它不填写用户输入。然后它分别提交变量。通过将两者分开,人们无法将sql代码放入他们的插入中。非常适合防止 SQL 注入攻击!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 2014-11-26
    • 2012-07-16
    • 2015-04-10
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多