【问题标题】:PHP array values with SQL statement带有 SQL 语句的 PHP 数组值
【发布时间】:2013-10-25 07:58:18
【问题描述】:

在 PHP 中,我想执行一个 SQL 查询,将数组值与 SQL 语句一起传递。我做不到。

请考虑以下事项

$db = "mydatabase.sqlite";
$array = array(
              "key1" => "value1",
              "key2" => "value2",
              "key3" => "value3"
         );

try {

    $dbhandle = new PDO("sqlite:$db");
    $dbhandle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    foreach ($array as $item) {

      $timestamp = 
      $dbhandle->exec(
              "INSERT OR REPLACE INTO table (field1, field2, field3) 
                   VALUES ('$item['key1']', '$item['key2']', '$item['key3']')"
              );
      $dbhandle = NULL;

    } 

  } 

catch(PDOException $e) {
    print "Exception : ".$e->getMessage()."\n";
  }

SQL语句如何表达?

【问题讨论】:

    标签: php sql sqlite pdo


    【解决方案1】:

    将数组元素插入字符串时,不要在键周围加上引号:

              "INSERT OR REPLACE INTO table (field1, field2, field3) 
                   VALUES ('$item[key1]', '$item[key2]', '$item[key3]')"
    

    或使用带有花括号的“复杂”语法:

              "INSERT OR REPLACE INTO table (field1, field2, field3) 
                   VALUES ('{$item['key1']}', '{$item['key2']}', '{$item['key3']}')"
    

    但是,最好使用准备好的语句:

    $stmt = $dbhandle->prepare("INSERT OR REPLACE INTO table (field1, field2, field3)
                                VALUES (:key1, :key2, :key3)");
    $stmt->execute($item);
    

    【讨论】:

    • 技术上是正确的,但@CptNemo 请改用准备好的语句;使用例如 $pdoStmt->bindValue( ':key1', $item['key1'] ) 转义输入,同时尊重 DB 数据类型,您可以使用默认数组表示法......
    猜你喜欢
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    相关资源
    最近更新 更多