如何使用 PDO 从 php 文件中插入数据?

Posted

技术标签:

【中文标题】如何使用 PDO 从 php 文件中插入数据?【英文标题】:How do I insert data from a php file using PDO? 【发布时间】:2014-11-11 12:34:33 【问题描述】:

我正在尝试使用 php 文件中的 PDO 为我的网站记录一些数据。我有以下由 javascript 库 D3 调用的代码。调用工作正常,但是当我运行此代码时,我收到“内部服务器错误”。

我做错了什么?我一直在遵循网站上的指南,并且基本上使用与他们相同的原则。如果有人可以提供帮助,我将不胜感激。提前非常感谢,我的代码粘贴在下面。 (当然数据库信息是有效的)

    $hostname="xxxx";
    $username="xxxxxx";
    $pw="xxxxxxxx";
    $dbname="xxxx";

    try 
        $pdo = new PDO ("mysql:host=$hostname;dbname=$dbname","$username","$pw");
     catch (PDOException $e) 
        echo "Failed to get DB handle: " . $e->getMessage() . "\n";
        exit;
    

    //Gets IP for client.
    $ip = get_client_ip();
    //An email, format of string.
    $email = "test@test.dk";
    //An int, in this case 19.
    $prgm_name = $_GET["prgm"];
    //Piece of text, format of string of course.
    $prgm_options.=$prgm_name;
    $prgm_options.= " - ";
    $prgm_options.=$_GET["gene"];
    $prgm_options.=" - ";
    $prgm_options.=$_GET["data"];
    //Datasize, int.
    $data_size = 0;
    //Timestamp.
    $now = "NOW()";

    //Table name.
    $STAT_TABLE = "stat";

    $query = $pdo->prepare("INSERT INTO $STAT_TABLE (ip, email, prgm, options, datasize, date) VALUES (:ip, :email, :prgm_name, :prgm_options, :data_size, :now);");
    $query->execute(array(  ':ip'=>'$ip',
                             ':email'=>'$email',
                             ':prgm_name'=>$prgm_name,
                             ':prgm_options'=>'$prgm_options',
                             ':datasize'=>'$datasize',
                             ':now'=>$now));

【问题讨论】:

将 PDO 设置为异常模式,并在您的 execute 失败时捕获异常。 它不工作的可能原因有很多。您需要查看服务器的错误日志以获取比“内部服务器错误”更详细的信息。 在文件顶部设置 error_reporting(E_ALL);ini_set("display_errors", 1); 以获取有关错误的更多信息 为什么要在执行数组中的假定变量周围使用单引号? 【参考方案1】:

我喜欢单独绑定每个参数。我认为它可以让您更好地控制数据类型和大小。

try 
  $sth = $pdo->prepare("INSERT INTO..."); 
  $sth->bindParam(":ip", $ip, PDO::PARAM_STR, 16);   
  $sth->bindParam(":email", $email, PDO::PARAM_STR, 30);     
  // etc...
  $sth->execute();
 catch (Exception $e)  
  print_r($e);

【讨论】:

【参考方案2】:

尝试以下代码插入

$count = $pdo->exec("INSERT INTO $STAT_TABLE(ip, email, prgm, options, datasize, date) VALUES ('$ip','$email',$prgm_name,'$prgm_options','$datasize',$now)))");
/*** echo the number of affected rows ***/
echo $count;

【讨论】:

我们使用 PDO 的主要目的之一是用于参数化查询。您的代码不妨使用旧的 mysql_* 函数。 我用上面的代码插入,没有使用mysql_*函数 您的代码仍然容易受到 SQL 注入的影响。您需要学习如何使用准备好的语句和参数化查询。 php.net/manual/en/pdo.prepared-statements.php

以上是关于如何使用 PDO 从 php 文件中插入数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 php pdo 中使用 1 个表单将数据插入到 2 个不同的表中?

如何将表的行从一个数据库插入另一个数据库(使用两个PDO)

如何使用 PHP PDO 在 mySQL 中插入多行 JSON 对象数据?

使用 PDO 和 PHP 将表单中的数据插入 MySQL 数据库

如何在使用 PHP-PDO 记录查询时获取最后一个插入 ID

如果记录已经存在或者在 PDO MySQL 插入查询中不存在,如何生成 javascript 警报?