我写了一个php脚本,将CSV文件导入wordpress数据库。我今天一直在处理许多不同的错误,这些错误导致网站崩溃直到我修复它们。
现在所有错误都被清除,函数末尾的字符串被打印到屏幕上,好像一切正常,但没有将数据输入数据库。
另外,为了测试起见,我删除了创建数据库部分,只留下了删除以查看它是否会删除数据库而它没有。所以基本上看起来我的功能没有错误,但它正在运行。它实际上并没有做任何事情。我不明白它是如何运行该函数告诉我每次有错误或文件路径不存在但实际上没有执行我试图执行的操作。
有关如何解决此问题或从何处开始的任何输入将不胜感激,
function productsExec() {
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
global $wpdb;
global $simple_prod_version;
$table_name = $wpdb->prefix . "wuno_inventory";
if($wpdb->get_var("show tables like '$table_name'") != $table_name) {
$sql = "DROP TABLE IF EXISTS $table_name";
dbDelta($sql);
// $wpdb->query($sql);
$sql = "CREATE TABLE " . $table_name . " (
id int(8) NOT NULL AUTO_INCREMENT,
wuno-product varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
wuno-description varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
wuno-alternates varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
wuno-onhand varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
wuno-condition varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;";
dbDelta($sql);
// $wpdb->query($sql);
//Upload File
if (is_uploaded_file($_FILES['inventory.csv']['tmp_name'])) {
echo "<h1>" . "File ". $_FILES['inventory.csv']['name'] ." uploaded successfully." . "</h1>";
echo "<h2>Displaying contents:</h2>";
readfile($_FILES['inventory.csv']['tmp_name']);
}
//Import uploaded file to Database
$handle = fopen(inventory.csv, 'w');
while (($data = fgetcsv($handle, 10000, ",")) !== FALSE) {
$insert = "INSERT INTO" . $table_name . "(wuno-product, wuno-description, wuno-alternates, wuno-onhand, wuno-condition)" .
"VALUES ('$data[0]', '$data[1]', '$data[2]', '$data[3]', '$data[4]')";
$results = $wpdb->query( $insert );
}
fclose($handle);
echo 'Everything seems to be running smoothly.';
}
}
答案 0 :(得分:2)
如评论中所述,并根据OP的要求:
INSERT INTO" . $table_name . "
转换为INSERT INTOtablename
,因为INFO
和"
之间没有空格
另外,对于MySQL正在翻译为wuno
MINUS product
的列名称,您使用连字符作为数学公式,对于其他列名称也是如此。
在标识符限定符
上查阅http://dev.mysql.com/doc/refman/5.7/en/identifier-qualifiers.html您可以使用连字符,但需要在列名称周围使用刻度。
$insert = "INSERT INTO " . $table_name . " (`wuno-product`, `wuno-description`, `wuno-alternates`, `wuno-onhand`, `wuno-condition`)
编辑:
我发现了别的东西。
$handle = fopen(inventory.csv, 'w');
文件名周围应该有引号:
$handle = fopen("inventory.csv", 'w');
根据fopen()
http://php.net/manual/en/function.fopen.php
$handle = fopen("c:\\folder\\resource.txt", "r");
错误报告会让你注意到它。
另外,由于您正在使用$_FILES
,并且如果使用表单,它应该是POST方法并包含有效的enctype。
但是,这似乎无效$_FILES['inventory.csv']
或不清楚。
通常,第一个数组参数是匹配的名称属性。请参阅上面的手册链接。
同时将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Then the rest of your code
旁注:只应在暂存时进行显示错误,而不是生产。