【问题标题】:Mysql - conditional insert query with select and PDOMysql - 带有选择和 PDO 的条件插入查询
【发布时间】:2014-01-25 12:14:01
【问题描述】:

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

我也经历过这个问题:

MySQL INSERT from a SELECT with PDO

但是VALUES 部分在哪里?

就像我在 Mysql 中插入了这个查询,在这里我也使用了 Values:

$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;

【问题讨论】:

    标签: php mysql sql pdo


    【解决方案1】:

    有两个有效的INSERT 语法:

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

    或者

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

    选定的列是您的值字段。

    @cmets: 代替: http://dev.mysql.com/doc/refman/5.5/en/replace.html

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

    【讨论】:

    • 好的,我明白了,但我如何才能将我的第一个查询设置为“如果 name 已经存在此 user_id 然后不要插入,否则将其插入数据库”如何实际做到这一点?
    • 这不能在没有 MySQL 过程或外部逻辑的情况下完成。 MySQL 提供了一个 replace 语句,如果主键已经存在则替换记录,否则插入新行
    【解决方案2】:

    您正在循环中定义参数 :sname 和 :uid。 execute 方法获取参数并在执行此之前将它们“放入”查询中。

    换句话说,调用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] ... ]
    

    【讨论】:

    • 我的问题不清楚,我已经更新了...请检查一下,也许你会再次理解我在寻找什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多