Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在mySQL语句中使用双引号和单引号时出现问题,字段中有单引号_Php_Mysql - Fatal编程技术网

Php 在mySQL语句中使用双引号和单引号时出现问题,字段中有单引号

Php 在mySQL语句中使用双引号和单引号时出现问题,字段中有单引号,php,mysql,Php,Mysql,$\u SESSION['ddv'](或$all\u ddv)是一个名称字符串,如下所示:“名称1”、“名称2”等(请注意单引号)。我需要将此字段存储为与此完全相同的格式(使用“和”),因为我稍后会使用如下查询调用它:从“$tbl.”中选择*其中voixIN(field ddv) 问题是每个名称(在单引号之间,用逗号分隔)都被视为一个新的字段条目,我得到了SQL错误1136-错误的字段计数 我尝试了所有可能的“,”组合,,但没有成功。。。 表结构:num,pseudo,title,ddv,vis

$\u SESSION['ddv'](或$all\u ddv)是一个名称字符串,如下所示:“名称1”、“名称2”等(请注意单引号)。我需要将此字段存储为与此完全相同的格式(使用“和”),因为我稍后会使用如下查询调用它:从“$tbl.”中选择*其中
voix
IN(field ddv)

问题是每个名称(在单引号之间,用逗号分隔)都被视为一个新的字段条目,我得到了SQL错误1136-错误的字段计数

我尝试了所有可能的“,”组合,
,但没有成功。。。
表结构:num,pseudo,title,ddv,visible(问题在于
ddv字段`)


您应该转换为PDO或MySQLI,并使用准备好的语句,而不是将变量替换到SQL字符串中。但是,在您可以这样做之前,您需要使用
mysql\u real\u escape\u string()
来转义字符串,以防止SQL注入和转义引号

$pseudo = mysql_real_escape_string($_GET['pseudo']);
$title = mysql_real_escape_string($_GET['title']);
$all_ddv = mysql_real_escape_string($_SESSION['ddv']);
$sql = "INSERT INTO livres_perso VALUES ('num', '$pdeudo', '$title', '$all_ddv','0')";

我建议您使用mysqli函数而不是mysql函数,因为它们已被弃用,并且从PHP7.0开始完全删除。说到这里,请尝试使用mysqli_real_escape_string()函数的代码:

if (isset($_GET['session_save_ddv'])) {
    $query = "INSERT INTO livres_perso VALUES ('number', ".mysqli_real_escape_string($_GET['pseudo']).", ".mysqli_real_escape_string($_GET['title']).", ".mysqli_real_escape_string($_SESSION['ddv']).", 'another number')";

    if (mysqli_query($query))
        echo 'New record created successfully!';
    else
        echo 'Error: '.mysqli_errno($error).' [Code: '.$query.']';
}

希望它有助于

停止使用
mysql_XXX
函数。它们在很多年前就被弃用了,并且完全从PHP7.0中删除了。你应该使用MySQLI或PDO,它们已经准备了带参数的语句,它们完全解决了这个问题。是的,谢谢Bamar!在我将$pseudo和$title放在单引号后,它就工作了(答案中省略)。您混淆了mysqli和PDO语法。此外,在使用参数时不应使用
mysqli\u real\u escape\u string
if (isset($_GET['session_save_ddv'])) {
    $query = "INSERT INTO livres_perso VALUES ('number', ".mysqli_real_escape_string($_GET['pseudo']).", ".mysqli_real_escape_string($_GET['title']).", ".mysqli_real_escape_string($_SESSION['ddv']).", 'another number')";

    if (mysqli_query($query))
        echo 'New record created successfully!';
    else
        echo 'Error: '.mysqli_errno($error).' [Code: '.$query.']';
}