PHP代码或CSV文件缺少什么?
“以“问题-PHP、SQL数据库、CSV文件”结尾的行” 我正在学习如何用PHP从本地文件更新数据库。 它工作正常,只是将CSV文件中的最后一个条目插入到数据库表中的所有字段中 我已尝试使用十六进制检查CSV,以及以(\r\n、\n等)结尾的行的所有可思考版本 这是我的 此图显示代码已正确执行。PHP代码或CSV文件缺少什么?,php,mysql,database,Php,Mysql,Database,“以“问题-PHP、SQL数据库、CSV文件”结尾的行” 我正在学习如何用PHP从本地文件更新数据库。 它工作正常,只是将CSV文件中的最后一个条目插入到数据库表中的所有字段中 我已尝试使用十六进制检查CSV,以及以(\r\n、\n等)结尾的行的所有可思考版本 这是我的 此图显示代码已正确执行。 以下是我的PHP代码: $dbhost = 'hidden'; $dbuser = 'hidden'; $dbpass = 'hidden'; $dbname = 'hidden'; // conn
以下是我的PHP代码:
$dbhost = 'hidden';
$dbuser = 'hidden';
$dbpass = 'hidden';
$dbname = 'hidden';
// connect to the database
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
mysqli_options($conn, MYSQLI_OPT_LOCAL_INFILE, true);
// check connection
if(!$conn){
echo 'Connection error: '. mysqli_connect_error();
}
// create temporary table
$create = 'CREATE TABLE tmp
(
name_id varchar(255),
phone varchar(255),
INDEX (name_id)
)';
// check if creation was successful
if(mysqli_query($conn, $create)){
echo "Records were updated successfully CREATE.";
} else {
echo "ERROR: Could not able to execute $create. " . mysqli_error($conn);
} ?><br><br><?php
// load data from local file into temp table
$load = "LOAD DATA LOCAL INFILE 'try1.csv'
INTO TABLE tmp
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\r\n' IGNORE 1 LINES
(@name_id, @phone)" ;
// check if load was successful
if(mysqli_query($conn, $load)){
echo "Records were updated successfully LOAD.";
} else {
echo "ERROR: Could not able to execute $load. " . mysqli_error($conn);
} ?><br><br><?php
// set/update temp table with info from csv file
$set = "UPDATE tmp SET
name_id = @name_id,
phone = @phone "
;
// check if update was successful
if(mysqli_query($conn, $set)){
echo "Records were updated successfully SET.";
} else {
echo "ERROR: Could not able to execute $set. " . mysqli_error($conn);
}
mysqli_close($conn);
$dbhost='hidden';
$dbuser='hidden';
$dbpass='hidden';
$dbname='hidden';
//连接到数据库
$conn=mysqli_connect($dbhost、$dbuser、$dbpass、$dbname);
mysqli_选项($conn,mysqli_OPT_LOCAL_infle,true);
//检查连接
如果(!$conn){
回显“连接错误:”。mysqli_connect_error();
}
//创建临时表
$create='create TABLE tmp
(
name_id varchar(255),
电话varchar(255),
索引(名称\u id)
)';
//检查创建是否成功
if(mysqli_查询($conn$create)){
echo“已成功更新记录并创建。”;
}否则{
echo“错误:无法执行$create.”。mysqli_错误($conn);
}?>
您需要修改代码中的两件事:
如果只是添加了数据,则不需要更新数据
加载数据中的列名称不正确(应该删除@),因此插入的是空行。(如果表中只有这两列,则无需指定名称,也可以删除它们。)
将代码修改为:
$dbhost = 'hidden';
$dbuser = 'hidden';
$dbpass = 'hidden';
$dbname = 'hidden';
// connect to the database
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
mysqli_options($conn, MYSQLI_OPT_LOCAL_INFILE, true);
// check connection
if(!$conn){
echo 'Connection error: '. mysqli_connect_error();
}
// create temporary table
$create = 'CREATE TABLE tmp
(
name_id varchar(255),
phone varchar(255),
INDEX (name_id)
)';
// check if creation was successful
if(mysqli_query($conn, $create)){
echo "Records were updated successfully CREATE.";
} else {
echo "ERROR: Could not able to execute $create. " . mysqli_error($conn);
} ?><br><br><?php
// load data from local file into temp table
$load = "LOAD DATA LOCAL INFILE 'try1.csv'
INTO TABLE tmp
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\r\n' IGNORE 1 LINES
(name_id, phone)" ;
// check if load was successful
if(mysqli_query($conn, $load)){
echo "Records were updated successfully LOAD.";
} else {
echo "ERROR: Could not able to execute $load. " . mysqli_error($conn);
} ?><br><br><?php
mysqli_close($conn);
$dbhost='hidden';
$dbuser='hidden';
$dbpass='hidden';
$dbname='hidden';
//连接到数据库
$conn=mysqli_connect($dbhost、$dbuser、$dbpass、$dbname);
mysqli_选项($conn,mysqli_OPT_LOCAL_infle,true);
//检查连接
如果(!$conn){
回显“连接错误:”。mysqli_connect_error();
}
//创建临时表
$create='create TABLE tmp
(
name_id varchar(255),
电话varchar(255),
索引(名称\u id)
)';
//检查创建是否成功
if(mysqli_查询($conn$create)){
echo“已成功更新记录并创建。”;
}否则{
echo“错误:无法执行$create.”。mysqli_错误($conn);
}问题在于您的更新查询。您将所有记录更新为最后一个值,只需注释该行,而不进行更新我应该注释掉整个更新查询吗?我试过了,这是我表中的结果:。具有(NULL)值的所有字段。更新查询应包含where子句,以便一次只更新一行(正确的)time@Will听起来是个好主意。关于如何确保它一次只通过一个唯一的ID,有什么建议吗?再想一想,可能更简单:为什么需要更新数据?您已经将它们加载到表中(很抱歉,我没有运行代码所需的内容)干杯!就这样!谢谢你,纳乔!