哦,我的好主。我正在尝试更新前一个程序员留下的一些编码。我遇到的问题是,当我尝试编写SQL语句时,星号会被文件列表替换。
他之前的人喜欢运行像shell脚本这样的PHP脚本。 (如果你只有锤子......)所以,这是从命令行运行的。
// Here's Jason's additions. We add split comissions to the splits table and merge them with the records coming out of GP.
$jemsql = "select * from splits where salesPerson = '$salesCode'";
print "JemSQL: ".$jemsql."\n\n";
$sp_data = $mysql->query($jemsql);
$headData = array_merge($headData, $sp_data);
基本PHP,对吗?好吧,我一直收到SQL错误,日志显示......
select MJS_new.report.php OLE Spreadsheet Spreadsheet_Excel_Writer-0.9.2.tgz (long file listing...)
from exception where salesPerson = 'JD'
我回去运行原始脚本,问题是OEM。他在同一个地方遇到同样的问题。
在这里帮帮我,为什么星号会返回文件列表?如何覆盖星号?有什么办法可以阻止这种行为吗?如果需要更多代码,但我很难过。这怎么会发生?
编辑: 我已经最小化了文件,只保留了绝对需要的内容:
#!/usr/local/bin/php
<?
date_default_timezone_set("America/New_York");
$db_host = 'datasrv';
$db_user = 'XXXX';
$db_pass = 'XXXX';
$db_name = 'financials';
mysql_connect($GLOBALS["db_host"], $GLOBALS["db_user"], $GLOBALS["db_pass"]) or die('Could not connect: ' . mysql_error());
mysql_select_db($GLOBALS["db_name"]) or die('Could not select database'.$db);
// Here's Jason's additions. We add split comissions to the splits table and merge them with teh records coming out of GP.
$jemsql = "select * from splits where salesPerson = '".$salesCode."'";
print "JemSQL: ".$jemsql."\n\n";
$sp_data = mysql_query($jemsql)
?>
当我使用通常用于启动它的shell脚本运行时,这是输出:
JemSQL: select MJS_new.report.php OLE Spreadsheet Spreadsheet_Excel_Writer-0.9.2.tgz (long file listing) from splits where salesPerson = ''
如果我只是从命令行运行它:
/usr/local/bin/php ./min_report.php JD test.pdf
JemSQL: select * from splits where salesPerson = ''
以下是调用它的shell脚本:
for salesPerson in ${sales[*]}; do
fileTarget="$mountTarget$salesPerson/$fileName";
dirTarget="$mountTarget$salesPerson/";
out=`/usr/local/bin/php ./min_report.php $salesPerson $fileTarget`
echo $out;
out=`cp reports/$salesPerson.xls $dirTarget`;
echo $out;
echo $salesPerson;
cnt=`expr $cnt + 1`
done
所以,至少我已经解决了这个问题......而且我很想知道他为什么选择在bash shell中运行命令的“echo”方法。