0

我是 PDO 的新手,我正在尝试将数据插入表中。

这是我的表:

CREATE TABLE  `Message` (
`ID` INT( 8 ) NOT NULL  AUTO_INCREMENT ,
`DateTime` DATETIME NOT NULL ,
`SmsSid` VARCHAR( 34 ) NOT NULL ,
`AccountSid` VARCHAR( 34 ) NOT NULL ,
`From` VARCHAR( 12 ) NOT NULL ,
`To` VARCHAR( 12 ) NOT NULL ,
`Body` VARCHAR( 160 ) NOT NULL ,
`FromCity` VARCHAR( 50 ) NULL ,
`FromState` VARCHAR( 50 ) NULL ,
`FromZip` VARCHAR( 50 ) NULL ,
`FromCountry` VARCHAR( 50 ) NULL ,
`ToCity` VARCHAR( 50 ) NULL ,
`ToState` VARCHAR( 50 ) NULL ,
`ToZip` VARCHAR( 50 ) NULL ,
`ToCountry` VARCHAR( 50 ) NULL ,
`ConversationNumber` INT( 4 ) NOT NULL ,
PRIMARY KEY (  `ID` )
) ENGINE = MYISAM

这是我试图插入表格的 PHP 代码。执行此插入语句的正确方法是什么?准备()查询()执行()?

我可以通过使用这个类似的代码而不是上面的这个代码来插入一个不太复杂的表。我不确定究竟是什么导致了问题、语法、列类型、自动增量、日期时间?这个表有什么我没有在插入查询中处理的吗?我是否也正确处理异常/错误处理以查看我需要帮助调试的正确错误消息?

<?php
try
{
$connectionString = new PDO("mysql:host=xxxx;dbname=xxxx;","xxxx","xxxx");
}
catch(PDOException $e)
{
echo 'Connection failed'.$e->getMessage();
}

$DateTime = "NOW()";
$SmsSid = "abcdef";
$AccountSid = "abcdef";
$FromWho = "abcdef";
$To = "abcdef";
$Body = "abcdef";
$FromCity = "abcdef";
$FromState = "abcdef";
$FromZip = "abcdef";
$FromCountry = "abcdef";
$ToCity = "abcdef";
$ToState = "abcdef";
$ToZip = "abcdef";
$ToCountry = "abcdef";
$ConversationNumber = "abcdef";

try
{
$executeQuery = $connectionString->prepare("INSERT INTO Message (SmsSid,AccountSid,`From`,To,Body,FromCity,FromState,FromZip,FromCountry,ToCity,ToState,ToZip,ToCountry,ConversationNumber) VALUES (:SmsSid,:AccountSid,:FromWho,:To,:Body,:FromCity,:FromState,:FromZip,:FromCountry,:ToCity,:ToState,:ToZip,:ToCountry,:ConversationNumber)");

$executeQuery->execute(array(':SmsSid'=>$SmsSid,':AccountSid'=>$AccountSid,':FromWho'=>$FromWho,':To'=>$To,':Body'=>$Body,':FromCity'=>$FromCity,':FromState'=>$FromState,':FromZip'=>$FromZip,':FromCountry'=>$FromCountry,':ToCity'=>$ToCity,':ToState'=>$ToState,':ToZip'=>$ToZip,':ToCountry'=>$ToCountry,':ConversationNumber'=>$ConversationNumber));


}
catch(PDOException $e)
{
echo 'Query failed'.$e->getMessage();
}

$connectionString = null;
?>
4

5 回答 5

3

From是 MySQL 中的保留字。当您使用它作为列的名称时,您必须用反引号将其括起来,如

 `From`

默认情况下,PDO 不会抛出异常。要使其在错误时引发异常,请调用

$pdoObject->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
于 2013-02-24T23:53:50.880 回答
0

转义(使用backticks: `)表名和列名也非常重要。例如,FROM是 MySQL 中的保留关键字。

$SmsSid             = "abcdef";
$AccountSid         = "abcdef";
$From               = "abcdef";
$To                 = "abcdef";
$Body               = "abcdef";
$FromCity           = "abcdef";
$FromState          = "abcdef";
$FromZip            = "abcdef";
$FromCountry        = "abcdef";
$ToCity             = "abcdef";
$ToState            = "abcdef";
$ToZip              = "abcdef";
$ToCountry          = "abcdef";
$ConversationNumber = "abcdef";

try {
   $executeQuery = $connectionString->prepare('INSERT INTO `Message` (`SmsSid`, `AccountSid`, `From`, `To`, `Body`, `FromCity`, `FromState`, `FromZip`, `FromCountry`, `ToCity`, `ToState`, `ToZip`, `ToCountry`, `ConversationNumber`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');

   $executeQuery->execute(array($SmsSid, $AccountSid, $From, $To, $Body, $FromCity, $FromState, $FromZip, $FromCountry, $ToCity, $ToState, $ToZip, $ToCountry, $ConversationNumber));
}
catch(PDOException $e) {
       echo 'Query failed' . $e->getMessage();
}
于 2013-02-25T00:04:50.913 回答
0

尝试通过使用抽象库(例如safemysql
)自动执行一些操作 看起来,您的代码可以大大缩短,而无需多次重复每个变量名称 - 最重要的是 - 无需关心字段名称是否为保留字- 所有格式都是自动完成的:

<?php
$db = new safemysql('host'=>'xxxx','db'=>'xxxx','user'=>"xxxx",'pass'=>"xxxx");
$insert = array( 
    'SmsSid'             => "abcdef",
    'AccountSid'         => "abcdef",
    'From'               => "abcdef",
    'To'                 => "abcdef",
    'Body'               => "abcdef",
    'FromCity'           => "abcdef",
    'FromState'          => "abcdef",
    'FromZip'            => "abcdef",
    'FromCountry'        => "abcdef",
    'ToCity'             => "abcdef",
    'ToState'            => "abcdef",
    'ToZip'              => "abcdef",
    'ToCountry'          => "abcdef",
    'ConversationNumber' => "abcdef",
);
$db->query("INSERT INTO Message SET DateTime = NOW(), ?u", $insert);
?>

请注意,我将NOW()函数调用直接添加到查询中,因为它是 Mysql 函数并且不需要格式化。

于 2013-02-25T09:06:40.307 回答
0
$sql = "INSERT INTO books2 (title,author,cover) values(?,?,?)";

$q = $conn->prepare($sql);

$q->bindParam(1, $title);

$q->bindParam(2, $author);

$q->bindParam(3, $cover, PDO::PARAM_LOB);

$q->execute();
于 2013-11-18T05:54:38.577 回答
0
      try {
     $db = new PDO('mysql:host=localhost;dbname=test_vendor_management_system', 'root', '');
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    }catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
    }

try {

    $stmt = $db->prepare("INSERT INTO car_details(`car_name`,`model_no`,`maker_id`,`dealer_id`,`car_added`) VALUES(?,?,?,?,NOW())");
    $stmt->execute(array($carcar_name,$model_no,$maker_id,$dealer_id));              
    echo "2nd Insertion Done  -".$affected_rows = $stmt->rowCount();
}catch(PDOException $e) {

    echo 'ERROR: ' . $e->getMessage();
}
 try {

       $values = array($carcar_name, $model_no, $maker_id, $dealer_id);
    $stmt = $db->prepare("INSERT INTO car_details
                        (`car_name`,`model_no`,`maker_id`,`dealer_id`,`car_added`)
                         VALUES
                        (:car_name,:model_no,:maker_id,:dealer_id,NOW())
                        ");
    $stmt->bindParam(':car_name', $carcar_name, PDO::PARAM_STR);
    $stmt->bindParam(':model_no', $model_no, PDO::PARAM_STR);
    $stmt->bindParam(':maker_id', $maker_id, PDO::PARAM_INT);
    $stmt->bindParam(':dealer_id', $dealer_id, PDO::PARAM_INT);
        $stmt->execute();
        echo "3rd Insertion Done  -".$affected_rows = $stmt->rowCount();
        echo "3rd Insertion Id  -".$insertId = $db->lastInsertId();
        }catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
        }

    $carcar_name="ESCORT/SQUIRE";
    $model_no="234";
    $maker_id="21";
    $dealer_id="12";

    try {

        $stmt = $db->prepare("INSERT INTO car_details(`car_name`,`model_no`,`maker_id`,`dealer_id`,`car_added`) VALUES(?,?,?,?,NOW())");
        $stmt->execute(array($carcar_name,$model_no,$maker_id,$dealer_id));              
        echo "2nd Insertion Done  -".$affected_rows = $stmt->rowCount();
    }catch(PDOException $e) {

        echo 'ERROR: ' . $e->getMessage();
    }   try {
        $stmt = $db->prepare("INSERT INTO car_details
                        (car_name,model_no,maker_id,dealer_id,car_added)
                         VALUES
                        (:car_name,:model_no,:maker_id,:dealer_id,:car_added)");

    $stmt->execute(array(':car_name'=>$carcar_name,
                         ':model_no'=>$model_no,
                         ':maker_id'=>$maker_id,
                         ':dealer_id'=>$dealer_id,
                         ':car_added'=>$car_added));

    echo "1st Insertion Done -".$affected_rows = $stmt->rowCount();
    }catch(PDOException $e) {

        echo 'ERROR: ' . $e->getMessage();
    }
于 2013-09-30T13:05:32.533 回答