0

我将如何编写一个 SQL 语句来插入可能包含撇号的值(例如,一个人的姓是 Conner,另一个人的姓是 O'Conner)?经过一番搜索,我找到了使用双撇号 ( O''Conner example) 的示例,但每个示例都将字符串硬编码在INSERT. 我没有遇到任何值可能包含或不包含撇号的示例。

我的简单语句在不使用撇号时没有任何问题,但如果使用撇号则失败。我知道我可以替换撇号,str_replace但显然,这会导致 O'Conner 示例显示为 OConner。 

这是一个速记版本,仅作为示例:

page1.php

// PHP
include_once('phpdata.php');
if (isset($_POST['firstname']) && isset($_POST['lastname'])) {
    $firstname = $_POST['firstname'];
    $lastname = $_POST['lastname'];

    // SQL connection
    $insert = doInsert($firstname, $lastname);
    // Execute statement using odbc_exec, etc.
}

// HTML
<input type="text" class="required" name="firstname" id="firstname" />
<input type="text" class="required" name="lastname" id="lastname" />

phpdata.php

function doInsert($firstname, $lastname) {
    $insert = "INSERT INTO mytable (firstname, lastname)
                VALUES ('$firstname', '$lastname')";
    return $insert;
}
4

4 回答 4

4

将 PDO 与准备好的语句一起使用将负责转义您的输入:

$dsn  = "mysql:host=localhost;dbname=your_db_name";
try {
    $db = new PDO($dsn, 'your_username', 'your_pass');
 } catch (PDOException $e) {
    die( "Erreur ! : " . $e->getMessage() );
 }

 $query  = "INSERT INTO mytable (firstname, lastname)
            VALUES (:firstname', :lastname)";
 $stmt   = $db->prepare($query);                          
 $stmt->bindParam(':firstname', $firstname);
 $stmt->bindParam(':lastname', $lastname);
 $stmt->execute();

文档:PHP 数据对象

于 2013-09-20T20:35:56.093 回答
2

您可以使用 replace 将所有 ' 替换为 ''。但是,正确的方法是使用参数化查询,您可以在其中将值作为参数插入到 SQL 语句中。然后该语言可以清理 ' 和任何其他可能导致问题的字符/关键字。无论使用哪种语言,参数化查询都是可行的方法。

于 2013-09-20T20:39:41.597 回答
2

考虑使用准备好的语句。这是将用户提交的数据输入数据库的最佳方式。它确保数据自动正确转义!

phpdata.php

<?php

function doInsert($firstname, $lastname) {
    $insert = "INSERT INTO mytable (firstname, lastname)
                VALUES (?, ?)";
    $pstmt = odbc_prepare($odb_con, $insert); /* Use global $odb_con to access the connection */
    $res = odbc_execute($pstmt, array($firstname, $lastname));
    return $res; /* Should return TRUE on success. */
}

?>

请注意,我的代码中没有包含任何错误检查。实施它也可能是明智的。

祝你好运!

于 2013-09-20T20:49:08.340 回答
-4

您可以尝试在插入之前使用函数添加斜杠来准备数据。

我不知道您是如何使用数据库的,但此功能是询问您问题的简单方法。

添加斜杠

于 2013-09-20T20:35:42.203 回答