所以我有一个类似下面的脚本。我试图在这个PHP脚本中编写一个sql脚本,它将根据条件进行一些更新或插入。但是,我遇到了如何在脚本中连接我的变量的问题。 while循环不起作用,但在此之前我运行了for循环并且似乎正常工作。我在这做错了什么?
P.S。我知道很多人会抱怨sql注入,但这是我们公司内部的一个内部项目,所以一切都是安全的,在一个单独的网络和一个单独的虚拟机,这是托管和测试。
<?php
include_once 'DbConnectPSI.php';
global $connect;
global $record3;
global $emptyQ;
global $rightOn;
global $i;
global $SqlArr;
$rightOn="Thank you, your time has been inserted successfully";
$i = 0;
$SqlArr = $_POST['SqlArr'];
while($i <= sizeof($SqlArr)) {
$emptyQ = "IF Exists (Select * from EmployeeTimesheetstemp where empid= $SqlArr[$i][0] and Day= '$SqlArr[$i][2]' and Title='$SqlArr[$i][3]' and Description='$SqlArr[$i][4]')
Update EmployeeTimesheetstemp Set Value=$SqlArr[$i][5] where empid=$SqlArr[$i][0] and Day='$SqlArr[$i][2]' and Title='$SqlArr[$i][3]' and Description='$SqlArr[$i][4]'
Else Insert into EmployeeTimeSheetstemp(EmpId,WkEnd,Day,Title,Description,Value,Timestamp,Abbrevjob) Values";
$emptyQ = $emptyQ . '('. $SqlArr[$i][0]. ', ' . "'". $SqlArr[$i][1] ."'" . ', '. "'". $SqlArr[$i][2] ."'" .', '. "'". $SqlArr[$i][3] ."'" .', '. "'". $SqlArr[$i][4] ."'" .', '. $SqlArr[$i][5] .',' . 'getDate()' . ', '. $SqlArr[$i][6] .')';
$i = $i + 1;
}
$record3 = odbc_exec($connect, $emptyQ);
//echo ($rightOn);
echo($emptyQ);
odbc_close($connect);
?>
FOR LOOP:
$emptyQ="Insert into EmployeeTimesheetsTemp (EmpId, WkEnd,Day,Title,Description,Value,TimeStamp,AbbrevJob) Values";
for ($i=0;$i<sizeof($SqlArr);$i++) {
if($i==sizeof($SqlArr)-1){
$emptyQ=$emptyQ . '('. $SqlArr[$i][0]. ', ' . "'". $SqlArr[$i][1] ."'" . ', '. "'". $SqlArr[$i][2] ."'" .', '. "'". $SqlArr[$i][3] ."'" .', '. "'". $SqlArr[$i][4] ."'" .', '. $SqlArr[$i][5] .',' . 'getDate()' . ', '. $SqlArr[$i][6] .')';
}
else{
$emptyQ=$emptyQ . '('. $SqlArr[$i][0]. ', ' . "'". $SqlArr[$i][1] ."'" .', '. "'". $SqlArr[$i][2] ."'" . ', '. "'". $SqlArr[$i][3] ."'" .', '. "'". $SqlArr[$i][4] ."'" .', '. $SqlArr[$i][5] .',' . 'getDate()' .', '. $SqlArr[$i][6] .'),';
}
}
答案 0 :(得分:1)
你正在用"
引用字符串做多维数组。你需要特别注意那些:
$foo[0][1] = 'bar';
echo "$foo[0][1]"; // output: Array[1]
PHP的解析器并不贪婪,默认情况下在FIRST数组取消引用后停止,并将其他所有内容视为纯文本。您需要进行字符串连接,或使用{}
- 扩展语法:
echo "" . $foo[0][1] . "";
echo "{$foo[0][1]}";
这两个都会输出bar
。