我首先在 MySQL 列中创建一个带有撇号的 ENUM 值,然后使用该值通过 PHP 填充 HTML 组合框,然后使用该值作为搜索数据库的选择,我遇到了麻烦。
这是我用来创建 ENUM 值的 SQL(我只显示有问题的值,而通常会有多个值):
ALTER TABLE `primary_images` CHANGE `imgClass` `imgClass` ENUM( 'Robin\'s' ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL
这是我在数据库列中最终得到的结果:
`imgClass` enum('Robin''s') DEFAULT NULL
因此我的第一个问题是为什么我的转义反斜杠和单引号变成了双引号? (顺便说一句,我正在使用 phpmyadmin 来管理我的数据库)
这是我用来创建组合框选项的 PHP:
$imgClass_query = "SELECT DISTINCT imgClass FROM primary_images ";
...
while ($imgClass_row = mysql_fetch_array($imgClass_result))
// Add a new option to the combo-box
echo "<option value='".$imgClass_row[imgClass]."'>".htmlspecialchars($imgClass_row[imgClass])."</option>\n";
正如您在上面看到的,我将 imgClass
值放置为 html 选项属性 value
以及显示的值。这是我随后用来搜索数据库的属性value
。
这是生成的 HTML 源代码:
<option value="Robin" s'="">Robin's</option>
很明显,当我使用 value
属性搜索数据库时,它会查找不存在的 Robin
。
我应该如何输入 ENUM 值,以及应该如何创建组合框以保持原始 ENUM 值的完整性?
另外,我不确定为什么生成的 HTML 中的 s'
后面有 =""
,以及为什么显示的值是完美的。有什么想法吗?
最佳答案
第 1 部分可能非常简单:'a''b'
是 'a\'b'
的替代方案因此意思是相同的。 UI 确信在查询中将返回正确的字符串,而不是表定义。
对于第 2 部分,Nedret Recep 已为您提供了正确答案。另外,我想知道如何
echo "<option value='".$imgClass_row[imgClass]."'>"
可能会导致
<option value="Robin" s'="">
。我宁愿期待
<option value='Robin's'="">
这显然是错误的,但可以用 htmlspecialchars()
解决.
编辑:我找到了一个可能的解释:浏览器的 HTML 解析器可能应该归咎于此。与
<select id="s" onchange="alert(document.getElementById('s').innerHTML + ' value:' + document.getElementById('s').value)">
<option value='Robin's'>a</option>
<option value='Robin's'>b</option>
</select>
我使用 Firefox
<option value="Robin's">a</option>
<option value="Robin" s="">b</option>
value:Robin's
带有选项a
和
<option value="Robin's">a</option>
<option value="Robin" s="">b</option>
value:Robin
带有选项b
。但它是经过解析和重新组装之后的,显然不是 PHP 生成的代码。即便如此,轴 '
又在哪里?在<option value="Robin" s'="">
.
关于php - 在 MySQL ENUM 值中使用撇号将填充 HTML 组合框以进行数据库搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7819509/