在Mysqli中搜索查询(防止在列中使用单引号-而不替换它)

时间:2018-12-15 19:33:32

标签: php mysql

我想知道MySQLi中是否有一个函数可以让我寻找包含单引号的单词。

一个例子比数百个解释要好,就是这样:

->首先 我收到一个要在PHP中搜索的字词(例如:示例的引号) 我有一个函数可以从任何收到的文本字符串中删除所有引号(') 然后我在MySQL数据库中执行搜索,但是MySQL数据库中的值包含QUOTE。

所以,我收到这样的数据:

$text_to_search = "Examples containing quote"; // Removed the quote
Column in database = "Example's containing quote";

如何在数据库中删除引号,以便可以将其与删除了引号的文本字符串进行比较?

在我的情况下,SOUNDEX是否可以工作?

先谢谢了。

1 个答案:

答案 0 :(得分:0)

您可以有条件地检查字符串的两个版本。根据单引号的存在查询一个或两个值。

未经测试的代码:

$config = ['localhost', 'root', '', 'dbname'];
$search = "Examples containing quote";
$values = [$search];
if (strpos($search, "'") !== false) {
    $values[] = str_replace("'", "", $search);
}
$count = sizeof($values);
$placeholders = implode(',', array_fill(0, $count, '?'));
$param_types = str_repeat('s', $count);

if (!$conn = new mysqli(...$config)) {
    echo "MySQL Connection Error: <b>Check config values</b>";  // $conn->connect_error
} elseif (!$stmt = $conn->prepare("SELECT * FROM tablename WHERE columnname IN ($placeholders)")) {
    echo "MySQL Query Syntax Error: <b>Failed to prepare query</b>";  // $conn->error
} elseif (!$stmt->bind_param($param_types, ...$values)) {
    echo "MySQL Query Syntax Error: <b>Failed to bind placeholders and data</b>";  // $stmt->error;
} elseif (!$stmt->execute()) {
    echo "MySQL Query Syntax Error: <b>Execution of prepared statement failed.</b>";  // $stmt->error;
} elseif (!$result = $stmt->get_result()) {
    echo "MySQL Query Syntax Error: <b>Get Result failed.</b>"; // $stmt->error;
} else {
    $resultset = $result->fetch_all(MYSQLI_ASSOC);
    echo "<div>Numrows: " , sizeof($resultset) , "</div>";
    foreach ($resultset as $row) {
        echo "<div>Row: {$row['columnname']}</div>";
    }
}