我试图编写一个由cron作业执行的PDO PHP文件。我的问题不是cron工作,而是我的脚本似乎不起作用的事实..
我找到了这个脚本
http://www.php.happycodings.com/Database_Related/code11.html并更改了一些内容。例如,我不需要发送给我的邮件,我只有一个.CSV文件。关于这个脚本,我想检查每一行,看它是否已经存在于数据库中。如果是这样,我想更新SQL中的行,如果不是我想在SQL中插入行。
它没有显示任何错误或任何内容,但不知何故它似乎没有在SQL中插入任何内容。每次我执行文件时,它都会在页面中运行并最终显示为空白..对我来说似乎是正确的,因为我已经告诉它如果发生错误就会死掉。
<?php
try{
$conn = new PDO("mysql:host=localhost;dbname=data", 'user', 'pass');
}
catch(PDOException $pe)
{
die('Connection error, because: ' .$pe->getMessage());
}
$columnheadings = 1;
$filecontents = file ('../../_resources/_csv/letters.csv');
for($i=$columnheadings; $i<sizeof($filecontents); $i++) {
list($f1, $f2, $f3)=explode(";",$filecontents[$i]);
$sth = $conn->prepare("SELECT * FROM test WHERE 1 = '".$f1."'");
if ($sth->execute() && $row = $sth->fetch())
{
$update = $conn->execute("UPDATE test SET 1 = '$f1', 2 = '$f2', 3 = '$f3' WHERE id='".$row['id']."'");
}
else
{
$insert = $conn->execute('INSERT INTO test VALUES ($filecontents[$i])');
}
}
?>
应该很容易看到我在脚本中尝试做什么,所以如果您有任何想法或建议,请告诉我该怎么做。
SQL Database
----------------
| id | 1 | 2 | 3 |
|----------------|
| 1 | A | A | A |
|----------------|
| 2 | B | B | B |
----------------
.CSV File
-----------
| 1 | 2 | 3 |
|-----------|
| A | A | A |
|-----------|
| B | B | B |
|-----------|
| C | C | C |
-----------
这意味着我的脚本应该能够忽略SQL数据库中已存在的A和B,然后只插入C.
这是@njk的想法的一个例子..但它似乎仍然无法工作..我是否需要一个服务器插件来接受传入的.CSV文件?
<?php
try{
$conn = new PDO("mysql:host=localhost;dbname=data", 'user', 'pass');
}
catch(PDOException $pe)
{
die('Connection error, because: ' .$pe->getMessage());
}
$sth = $conn->execute("LOAD DATA
INFILE '../../_resources/_csv/letters.csv'
[REPLACE] INTO TABLE test [FIELDS [TERMINATED BY ';']]
[LINES TERMINATED BY ' '] [IGNORE 1 LINES] (1, 2, 3)");
?>
答案 0 :(得分:0)
如果使用“替换为”功能,则可以简化查询并避免多次调用服务器。
$conn->execute("replace into test values ('$f1','$f2', '$f3') WHERE id='".$row['id']."'");
答案 1 :(得分:0)