首页 > 解决方案 > 在 mySQL 语句中使用双引号和单引号以及字段中的单引号项目时出现问题

问题描述

$_SESSION['ddv'](或 $all_ddv)是一串名称,如下所示:'name 1'、'name 2' 等(注意单引号)。我需要这个字段完全像这样存储(使用 ' 和 ,),因为我稍后会用一个看起来像这样的查询来回忆它:SELECT * FROM ".$tbl"。在哪里voix(字段 ddv)

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

我尝试了“,”,, to no avail... Table structure : num, pseudo, title, ddv, visible (trouble is withddv字段的所有可能组合)

<?php
//Save the selection to table book_perso
if(isset($_GET["session_save_ddv"])) {
    $all_ddv = $_SESSION['ddv'];
    echo 'ECHO $all_ddv for debugging : '.$all_ddv.'<br>';
    $sql = "INSERT INTO livres_perso VALUES ('num','$_GET[pseudo]', '$_GET[title]', '$all_ddv','0')";
    if (mysql_query($sql)) {
        echo "New record created successfully !";
    } else {
        echo "** Error: " . $sql . "<br>" . mysql_errno();
    }
}
?>

在表中我想要:2 ¦ my pseudo ¦ my title ¦ 'john', 'anne', 'ed' ¦ 1 ¦

标签: phpmysql

解决方案


您应该转换为 PDO 或 MySQLI 并使用准备好的语句,而不是将变量替换为 SQL 字符串。但在你能做到这一点之前,你需要使用mysql_real_escape_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')";

推荐阅读