【问题标题】:query mysql database containing HTML special character with php用php查询包含HTML特殊字符的mysql数据库
【发布时间】:2012-11-28 10:07:39
【问题描述】:

...我没有进一步说明。

我的数据库包含一列 'name' = 'John Richards'

我尝试像这样查询它:

$act = "John Richards";
prepareEditing($act);

function prepareEditing($act) {
include ($_SERVER['DOCUMENT_ROOT']."/final_ritg/includes/dbconnect.php");
$act = str_replace(" ", " ", $act);
$sql = "select `name`,`genre`, `members`, `story`, `image`, `contact_fname`, `contact_lname`, `contact_phone`, `contact_email` from `festival`.`act` where `name` = :name ;";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':name', $act);
$stmt->execute();

echo $stmt->rowCount();
}

当 'name' 只包含一个单词时,例如 'john',函数返回 1($act 也包含 'john')。

我必须如何准备我的查询?

编辑:我正在全面使用 utf8。

编辑:这是我用来插入数据的 prepare stmt: $stmt->bindParam(':name', str_replace(' ',' ',$name));

我这样做了,因为在尝试检索时查询结果会在空白处被截断。

【问题讨论】:

  • 我要补充一点,即使您在查询字符串中替换了变量,它也应该用引号引起来。因此,您应该使用"name" = ':name',而不是"name" = :name
  • 这不是 PDO 的工作方式。占位符在需要时会给出引号。有关详细信息,请参阅prepared statements docs
  • 您确定该值是您选择的字面意思吗?尾随或双倍空格会干扰完全匹配。

标签: php mysql special-characters


【解决方案1】:

事实证明,我的错误不在 php 中,而是在 html 中。

我正在从表中创建一个选择列表。因为名称是唯一的,所以我将它们用作主键和每个选择选项的值...那些不喜欢空格的。

这里的解决方案是向表中添加编号索引或进行一些字符串转换(但这会导致为查询准备字符串的大量额外工作)我还不知道我会怎么做超过这个。

不管怎样,也许另一个初学者也遇到了同样的陷阱并觉得这很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2013-10-05
    • 2014-12-21
    • 1970-01-01
    相关资源
    最近更新 更多