PHP到LOAD DATA LOCAL INFILE不起作用

时间:2017-09-22 14:48:01

标签: php mysql mysqli mysql-workbench

我已查看过一些相同问题的帖子,但仍然无法解决问题。我认为我的问题可能与其他问题不同。我认为这可能是文件权限问题或与文件或路径的位置有关的事情。也许这是MacOS沙盒问题?这个语句在MySQL Workbench中运行得很好。我在MacOS 10.12.6上运行MySQL 5.7.19。任何想法???

<?php

$host="localhost";
$port=3306;
$socket="/tmp/mysql.sock";
$user="user";
$password="password";
$dbname="Test_Company";

$con = new mysqli($host, $user, $password, $dbname, $port, $socket)
or die ('Could not connect to the database server' . mysqli_connect_error());

$sql = "LOAD DATA LOCAL INFILE '/Users/Test.User/Desktop/Data/Inventory Data.csv'
    INTO TABLE inventory data
    FIELDS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '\"' 
    IGNORE 1 LINES " ; 

if ($stmt = $con->prepare($sql)) {
$stmt->execute();
$stmt->bind_result($field1, $field2);
while ($stmt->fetch()) {
    //printf("%s, %s\n", $field1, $field2);
}
$stmt->close();
}

$con->close();

?> 

看起来它应该非常简单直接,但无法想出这个......

1 个答案:

答案 0 :(得分:0)

Afaik,默认情况下未启用LOAD DATA INFILE选项。您必须在运行LOAD DATA INFILE查询之前启用它:

$con = new mysqli($host, $user, $password, $dbname, $port, $socket)
$con->options(MYSQLI_OPT_LOCAL_INFILE, TRUE);
//
// $stmt = $con->prepare($sql); 
// etc...