【问题标题】:Get number of affected rows in MySQL获取 MySQL 中受影响的行数
【发布时间】:2019-02-19 15:59:01
【问题描述】:

试图让受影响的行返回 0 文件包含 250k 条记录:

$affectedRows = 0;
$affectedRows = $pdo->exec(
        "DELETE FROM tablename WHERE Col3 BETWEEN '2018-01-01 00:00:00' AND '2018-01-31 00:00:00';
        ALTER TABLE tablename AUTO_INCREMENT = 1;
        LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE tablename 
        FIELDS TERMINATED BY ',' 
        LINES TERMINATED BY ' ' ( `Col1`, `Col2`, `Col3`)");

echo var_dump($affectedRows);

存储 CSV 但返回 0

【问题讨论】:

  • $affectedRows 来自哪里。 vardump 是什么?
  • PDO 不允许您通过单个 $pdo->exec() 调用执行多个查询。
  • 您还缺少 exec() 参数周围的引号。
  • @JNevill 你看到这条线echo vardump($affectedRows); ???而 Vardump 是输出返回数据的方法。
  • 我虽然是 var_dump() 但我不再写太多 pho 所以也许我错了。

标签: mysql pdo load-data-infile


【解决方案1】:

解决方法:

完全支持此脚本:

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE tablename 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY ' ' ( `Col1`, `Col2`, `Col3`)

但我在一些类似的查询中将它与其他合并:

DELETE FROM tablename WHERE date BETWEEN '$Date1' AND '$Date2';
ALTER TABLE tbalename AUTO_INCREMENT = 1;
LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE tablename 
    FIELDS TERMINATED BY ',' 
    LINES TERMINATED BY ' ' ( `Col1`, `Col2`, `Col3`);

这是错误的,因为$PDO->exec()不能返回受影响的表或行数。

代替它,要解决我需要过去的数组,因为我的脚本支持它:

$stmtpre[1] = "DELETE FROM tablename WHERE date BETWEEN '$Date1' AND '$Date2';";
$stmtpre[2] = "ALTER TABLE tbalename AUTO_INCREMENT = 1;";
$stmtpre[3] = "LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE tablename 
        FIELDS TERMINATED BY ',' 
        LINES TERMINATED BY ' ' ( `Col1`, `Col2`, `Col3`);";

同理:https://stackoverflow.com/a/52370701/9632001

【讨论】:

    猜你喜欢
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2016-11-01
    相关资源
    最近更新 更多