所以我有一个类似于下面的脚本。我正试图在这个php脚本中编写一个sql脚本,它将根据情况进行一些更新或插入。然而,我遇到了一个问题,即如何在脚本中连接变量。while循环不起作用,但在此之前,我运行了for循环,它似乎正常工作。我在这里做错了什么?
附言:我知道你们中的许多人会抱怨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循环:
$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] .'),';
}
}
您在"
引用的字符串中执行多维数组。你需要特别注意这些:
$foo[0][1] = 'bar';
echo "$foo[0][1]"; // output: Array[1]
PHP的解析器并不贪婪,默认情况下在FIRST数组取消引用后停止,并将其他所有内容都视为纯文本。您要么需要进行字符串连接,要么使用{}
扩展语法:
echo "" . $foo[0][1] . "";
echo "{$foo[0][1]}";
这两者都将输出CCD_ 3。