我很尴尬,因为应该是一项非常简单的任务,但我无法弄清楚为什么这不起作用。我使用制表符分隔文件来获取填充MySQL表所需的值。我有2个MySQL表,clients
和data
clients
表有一个我需要在data
表的插入中获取和使用的ID
<?php
// MySQL settings
define('DB_SERVER', 'localhost');define('DB_USERNAME', 'USER');
define('DB_PASSWORD', 'pass');define('DB_DATABASE', 'DB');
// connect to DB
if ($db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE)){}
else {echo 'Connection to DB failed';die();}
// load tab delim file
$file = "file.csv";// TSV actually
$handle = fopen($file, "r"); // Make all conditions to avoid errors
$read = file_get_contents($file); //read
$lines = explode("\n", $read);//get
$i= 0;//initialize
// loop over file, one line at a time
foreach($lines as $key => $value){
$cols[$i] = explode("\t", $value);
// get order ID for this URL
//$cols[$i]['6'] stores website URLs that match `salesurl` in the clients table
$getidsql = 'select `id` FROM DB.clients WHERE `salesurl` = \''. $cols[$i]['6'].'\'';
if ($result = mysqli_query($db, $getidsql)){
$totalcnt = mysqli_num_rows($result);
$idrow = mysqli_fetch_array($result);
echo '<h1>:'. $idrow['id'] .': '.$totalcnt.'</h1>'; //prints ':: 0'
} else {
echo mysqli_error($db);
echo 'OOPS<hr>'. $getidsql .'<hr>';
}
// if $idrow['id'] actually had a value, then
$insertqry = 'INSERT INTO `data` ......';
$i++;
} //end for each, file line loop
?>
当复制粘贴到PHPMyADMIN时,$ getidsql查询会起作用我得到id
结果,但是在这个脚本中,mysqli_num_rows总是为零,并且永远不会填充$ idrow,例如;没有错误..但没有结果(好吧,空的结果)
答案 0 :(得分:0)
原来我的代码工作正常。我的问题在于我正在使用的数据文件。所有数据都包含不可打印的字符,实际上每个字符后跟一个非ASCII字符。在我的查询中使用它之前运行此preg_replace解决了这个问题。
$data[$c] = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x80-\x9F]/u', '', $data[$c]);