-2

我有以下代码可以正常工作,因为它使用 pdo 即使是动态生成 sql 查询(我认为)。

$fields = array(
    'col1'  => 'radiobutton1',
    'col2'  => 'radiobutton2'
);

$parts = array();

foreach($fields as $dbfield => $field){
    $parts[] = '`' . $dbfield . '` = :' . $dbfield;
}

$DBH = new PDO( "mysql:host=localhost;dbname=database", "user", "pass" );
$DBH -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

$STH = $DBH -> prepare( 'UPDATE `table1` SET ' . join(', ', $parts) . ' WHERE `id`= :id' );

$STH -> bindParam( ':id', $some_id_here, PDO::PARAM_INT, 4 );

foreach($fields as $dbfield => $field) {
    $value = isset($_POST[$field]) ? 1 : 0;
    $STH -> bindValue( ':' . $dbfield, $value, PDO::PARAM_INT);
}

$STH -> execute();

我的问题是,我该如何更改它以便执行 sql 插入而不是更新?

4

4 回答 4

1

你可以这样做:

'INSERT INTO `table1` SET `id`= :id, ' . join(', ', $parts)

如果您对 id 有自动增量:

'INSERT INTO `table1` SET ' . join(', ', $parts)
于 2013-03-27T09:21:46.277 回答
1

似乎此代码仅适用于复选框。如果您希望它适用于所有字段类型,则必须将第二个 foreach 更改为

foreach($fields as $dbfield => $field) {
    if (isset($_POST[$field])) {
        $STH -> bindValue( ':' . $dbfield,$_POST[$field] );
    }
}

其余的很简单,只需将 UPDATE 替换为 INSERT 并从查询中删除 WHERE 部分(并且显然摆脱绑定 id)

于 2013-03-27T10:22:18.537 回答
0

我认为这样的事情会起作用:(我使用 implode() 而不是 join() 但它本质上是相同的)。我之所以使用 implode() 而不是我认为 join() 与 SQL 语句一起使用会令人困惑(无论是 SQL 还是 PHP,您都必须三思而后行)。我还没有测试过代码,但我希望你能得到图片......

<?php
//...some code...
$dbValues = array();

foreach($fields as $dbfield => $field) {
    $dbValues[] = isset($_POST[$field]) ? 1 : 0;
}

$STH = $DBH -> prepare( 'INSERT INTO `table1` (' . implode(', ', $parts) . ') VALUES(' . implode(', ', $dbValues) . ')' );

//..more code...
?>
于 2013-03-27T09:38:39.630 回答
-1

这是我用于使用 MySQL/PDO 进行动态插入的函数。

function DB_Insert($table, $data) {
    $bind = ':'.implode(',:', array_keys($data));
    $sql  = 'INSERT INTO ' . $table . '(' . implode(',', array_keys($data)) . ') ' . 'VALUES (' .$bind. ')';
    $stmt = $DBH->prepare($sql);
    $stmt->execute(array_combine(explode(',',$bind), array_values($data)));
}

$table 只是表的字符串。

$data 是使用格式 $data['column1'] = value1 的键/值数组

请注意,上述功能不包括任何数据验证,我单独执行此操作。

于 2013-03-27T10:08:36.767 回答