Php 阿贾克斯赢了';t在SQL中插入带单引号的数据

Php 阿贾克斯赢了';t在SQL中插入带单引号的数据,php,sql,ajax,Php,Sql,Ajax,我有以下从HTML获取数据的变量: $workcarriedout = trim($_POST["workcarriedout"]); 下面的语句将此条目插入SQL数据库(不是mySQL数据库): 在输入到变量中的数据包含单引号之前,这种方法工作得非常好 有人能告诉我如何用单引号导入数据吗 编辑:如果这有区别,代码如下: <?php require_once('../settings.php'); // Get the form fields and remove whitesp

我有以下从HTML获取数据的变量:

    $workcarriedout = trim($_POST["workcarriedout"]);
下面的语句将此条目插入SQL数据库(不是mySQL数据库):

在输入到变量中的数据包含单引号之前,这种方法工作得非常好

有人能告诉我如何用单引号导入数据吗

编辑:如果这有区别,代码如下:

<?php
require_once('../settings.php');
// Get the form fields and remove whitespace
var_dump($_POST);

$datetime = trim($_POST["datetime"]);
$servername = trim($_POST["servername"]);
$carriedoutby = trim($_POST["carriedoutby"]);
$workverifiedby = trim($_POST["workverifiedby"]);
$authorisedby = trim($_POST["authorisedby"]);
$workcarriedout = trim($_POST["workcarriedout"]);
$howverified = trim($_POST["howverified"]);
$reason = trim($_POST["reason"]);
$impact = trim($_POST["impact"]);
$rollback = trim($_POST["rollback"]);


try {
    $db = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}


$stmt = $db->prepare("INSERT INTO [dbo].[server_log_entries] (date_time, server_name, carried_out_by, verified_by, authorised_by, work_carried_out, work_verified, change_reason, perceived_impact, rollback_process)
                    values ('$datetime','$servername','$carriedoutby','$workverifiedby','$authorisedby','$workcarriedout','$howverified','$reason','$impact','$rollback')");

$stmt->execute();



socket_close($socket);

?>

您可以这样使用:

$stmt = $db->prepare("INSERT INTO [dbo].[server_log_entries] (work_carried_out)
                    values ('$workcarriedout')");

尝试此代码以转义单个代码,然后插入到db:

$workcarriedout = mysqli_real_escape_string($db, $workcarriedout);
$stmt = $db->prepare("INSERT INTO [dbo].[server_log_entries] (work_carried_out) values ('".$workcarriedout."')");

字符串中的引号正在打断SQL插入字符串。要避免这种情况,请尝试:

$escaped_string = $db->escape_string($workcarriedout); // does the job with the quotes

$stmt = $db->prepare("INSERT INTO [dbo].[server_log_entries] (work_carried_out)
                values ('".$escaped_string."')");
我测试了它,现在它工作了


有些事情不对劲,但我看不出是什么,你们和我的问题之间的唯一区别是

(`date_time`, `server_name` etc..) 
这是我的查询,它可以工作:/

$stmt = $db->prepare("INSERT INTO zeljka (`name`,`lastName`) VALUES ('\'$st\'', '\'$sta\''); and it works :////

您需要以正确的方式使用prepare语句。使用bind参数。可能与Hi Ankesh重复-感谢您的评论,这仍然会给我同样的问题,即中带有单引号的数据不会插入到SQL表中。Hi Zeljka-感谢您的评论,不幸的是,这不起作用。数据进入表中时没有“但尽管我犯了错误,我不明白您希望在表中使用”,我将编辑answerHi Zeljka,这对我不起作用,下面是代码当前的外观:
$stmt=$db->prepare(“插入[dbo]。[server\u log\u entries](
日期时间
服务器名称
执行人
验证人
授权人
执行工作
验证工作
变更原因
感知影响
回滚过程
)值(“\'$datetime\'”、“$servername\'”、“$carriedoutby\'”、“$workverifiedby\'”、“$AuthorizedBy\'”、“$escaped\'”、“$How Verified\'”、“$reason\'”、“$impact\'、“$rollback\”);
有些地方出了问题,但我看不出什么,你和我的查询之间唯一的区别是(
date\u-time
服务器名
等等)我的查询是$stmt=$db->prepare(“插入zeljka(
name
lastName
)值(“\'$st\”,“\'$sta\”));它可以工作://///嗨,Machado-谢谢你的评论,有了它,请求就不会通过了
(`date_time`, `server_name` etc..) 
$stmt = $db->prepare("INSERT INTO zeljka (`name`,`lastName`) VALUES ('\'$st\'', '\'$sta\''); and it works :////