我正在做php并编写一些代码来同时将数据插入到不同的表中。我写了一个foreach循环,我的代码的一部分如下:
while ($datarow = dbgetrow($dataresult)) {
if ( $dotcount > $datanumrows) {
showarchivestatus(" .", true);
$dotcount = 1;
}
$sqlvalues = "";
foreach($lu_cols as $lu_col) {
if ($datarow[$lu_col] == "") {
$sqlvalues = $sqlvalues.", NULL ";
} else {
$sqlvalues = $sqlvalues.", \"".makesafe($datarow[$lu_col])."\"";
}
}
$sqlinsert = "INSERT INTO ".$lu_table." VALUES(".substr($sqlvalues,2).")";
$archivedb = dbconnect($a_host, $a_dbname, $a_port, $a_user, $a_password);
dbrunquery($sqlinsert, $archivedb);
$dotcount++;
}
这是函数makesafe:
function makesafe($text)
{
$instring = strpos($text, "'");
while ( $instring >= 0 )
{
if ( $instring === false )
break;
if ( substr($text, $instring-1, 1) != "\\" )
{
$text = substr($text, 0, $instring)."\\".substr($text, $instring, strlen($text)-$instring);
}
$instring = strpos($text, "'", $instring + 1);
}
$instring = strpos($text, '"');
while ( $instring >= 0 )
{
if ( $instring === false )
break;
if ( substr($text, $instring-1, 1) != "\\" )
{
$text = substr($text, 0, $instring)."\\".substr($text, $instring, strlen($text)-$instring);
}
$instring = strpos($text, '"', $instring + 1);
}
return $text;
}
但我得到了错误:
查询无效:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第1行的“support.microsoft.com/default.aspx?scid = kb \”)附近使用正确的语法 SQLStatement = INSERT INTO引用VALUES(“5441461”,“4”,“support.microsoft.com/default.aspx?scid=kb \”)
我知道问题是特殊字符\
,但我仍然希望使用此特殊字符插入数据。如何更改它并成功插入数据?许多人都欣赏任何答案。谢谢。
答案 0 :(得分:2)
在将字符串放入数据库之前,您需要转义它。
以下是如何在MySQLi中执行此操作的基本示例
<?php
$con=mysqli_connect("localhost","my_user","my_password","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// escape variables for security
$firstname = mysqli_real_escape_string($con, $_POST['firstname']);
$lastname = mysqli_real_escape_string($con, $_POST['lastname']);
$age = mysqli_real_escape_string($con, $_POST['age']);
$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('$firstname', '$lastname', '$age')";
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
mysqli_close($con);
?>
以下是PDO的一个示例:
<?php
$conn = new PDO('sqlite:/home/lynn/music.sql3');
/* Dangerous string */
$string = 'Naughty \' string';
print "Unquoted string: $string\n";
print "Quoted string:" . $conn->quote($string) . "\n";
?>
您可能需要考虑使用预先准备好的声明。这有几个好处,包括: