如何插入可能包含撇号的值

时间:2013-09-20 20:28:28

标签: php sql

我如何编写一个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 个答案:

答案 0 :(得分: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();

Doc:PHP Data Objects

答案 1 :(得分:2)

您可以使用替换来替换所有'with''。但是,正确的方法是使用参数化查询,您可以将值作为参数传递给SQL语句。然后语言可以清理'和任何其他可能导致问题的字符/关键字。无论语言如何,参数化查询都是可行的方法。

答案 2 :(得分:2)

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

<强> 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. */
}

?>

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

祝你好运!

答案 3 :(得分:-4)

您可以尝试使用函数addslashes在插入之前准备数据。

我不知道你如何使用数据库,但这个函数是问你问题的简单方法。

AddSlashes