PHP代码或CSV文件缺少什么?

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、SQL数据库、CSV文件”结尾的行”

我正在学习如何用PHP从本地文件更新数据库。 它工作正常,只是将CSV文件中的最后一个条目插入到数据库表中的所有字段中

我已尝试使用十六进制检查CSV,以及以(\r\n、\n等)结尾的行的所有可思考版本

这是我的

此图显示代码已正确执行。

以下是我的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,有什么建议吗?再想一想,可能更简单:为什么需要更新数据?您已经将它们加载到表中(很抱歉,我没有运行代码所需的内容)干杯!就这样!谢谢你,纳乔!