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コードです。この挿入ステートメントを実行する適切な方法は何ですか?prepare()query()exec()?

この同様のコードを使用することで、それほど複雑でないテーブルに挿入できますが、上記のコードは挿入できません。問題の原因、構文、列の種類、自動インクリメント、日時が正確にわからないのですか?このテーブルで、挿入クエリで正しく処理していないものはありますか?また、デバッグを支援するために必要な適切なエラーメッセージを確認するために、例外/エラー処理を正しく処理していますか?

<?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

FromMySQLの予約語です。列の名前として使用する場合は、次のようにバッククォートで囲む必要があります。

 `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 Lookなどの抽象化ライブラリを使用して、一部のアクションを自動化してみてください
。各変数名を数回繰り返すことなく、コードを大幅に短縮できます。最も重要なのは、フィールド名が予約語であるかどうかを気にする必要がないことです。 -すべてのフォーマットは自動的に行われます:

<?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
      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 に答える
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 に答える