Mysql - 带select和PDO的条件插入查询

时间:2014-01-25 12:14:02

标签: php mysql sql pdo

我无法理解如何使用select语句应用插入查询:

我也经历过这个问题:

MySQL INSERT from a SELECT with PDO

VALUES部分在哪里?

就像我在Mysql中插入此查询一样,这里我也使用了值:

$db_conn->beginTransaction();
$query = $db_conn->prepare('INSERT INTO mytable (name, user_id) VALUES(:sname, :uid)');
foreach($UploadData AS $DataValue)
{
    $query->execute(array(':sname' => $DataValue['Name'],':uid' =>$_SESSION['uid']));
}
$db_conn->commit();

我的座右铭是检查name是否存在相同的uid它不应该导入数据,否则它应该。但是价值观在哪里:/我是盲目的:P

EDIT1 :来自MySQL INSERT from a SELECT with PDO

如果没有提供VALUES,此代码块将如何工作?

$sql_enc = '
    INSERT INTO sessionid (enc_id, enc_pass, enc_date) 
        (SELECT AES_ENCRYPT(username, :aeskey), AES_ENCRYPT(pwd, :aeskey), DATE_ADD(NOW(), INTERVAL 15 SECOND) FROM users WHERE username = :username)
';
$res_enc = $pdo->prepare($sql_enc);
$res_enc->bindParam(':aeskey', $aeskey);
$res_enc->bindParam(':username', $username);
$res_enc->bindParam(':pwd', $username);
$res_enc->execute();
$res_enc = null;

2 个答案:

答案 0 :(得分:1)

有两种有效的INSERT语法:

INSERT 
    INTO `table` [(field1, field2)] 
    VALUES ( 'val1', 'val2' )

或者

INSERT 
    INTO `table` [(field1, field2)] 
    SELECT 'val1', 'val2'

所选列是您的值字段。

@comments: 更换: http://dev.mysql.com/doc/refman/5.5/en/replace.html

程序: http://dev.mysql.com/doc/refman/5.6/en/create-procedure.html

答案 1 :(得分:0)

您正在循环中定义参数:sname和:uid。 execute方法在执行这个方法之前使用params并将其“放入”查询中。

换句话说,在调用prepare()时会编译查询,并在调用execute()时应用参数。

修改 好的,我不明白。

查询包括一个“SELECT”部分,它给出要插入的值。使用SELECT时,您不能写“VALUES”,因为the documentation说:

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
    [, col_name=expr] ... ]