我有一件奇怪的事,我不知道失败的地方。
$name = "Fast & Furious 8";
$res1 = $wpdb->prepare(
"
SELECT
*
FROM
wp_dbtable
WHERE
filmname = '%s'
LIMIT 1
",
$name
);
$res = $wpdb->get_results( $res1 );
foreach($res as $reseachG) {
}
我遇到符号问题&
。由于某些原因,它不会从我的桌子中拉出任何东西,即使它应该这样做。
如果我使用自己的文本代替变量,就像这样:
$res1 = $wpdb->prepare(
"
SELECT
*
FROM
wp_dbtable
WHERE
filmname = '%s'
LIMIT 1
",
"Fast & Furious 8"
);
它有效。此外,变量内的其他文本效果很好。
所以似乎prepare
或get_results
不接受此符号,或更改它。我该如何解决?我无法在互联网上找到任何暗示。
可能不是PHP
- 问题,或My-SQL
- 问题,这可能是WordPress课程的问题。
非常感谢。
答案 0 :(得分:0)
上面的代码是正确的。问题是,我从电影名称中删除了电影名称的文本。他改变了&进入html-special-chars。所以我不得不跑:htmlspecialchars_decode($filmname);
。这并不容易找到,因为每种印刷方法都印有正确的文字。
我在互联网上找到了一个功能,它向我展示了隐藏的字符和每一个真实的内容。也许它会帮助你们中的一些人:
function hexdump ($data, $htmloutput = true, $uppercase = false, $return = false){
// Init
$hexi = '';
$ascii = '';
$dump = ($htmloutput === true) ? '<pre>' : '';
$offset = 0;
$len = strlen($data);
// Upper or lower case hexadecimal
$x = ($uppercase === false) ? 'x' : 'X';
// Iterate string
for ($i = $j = 0; $i < $len; $i++)
{
// Convert to hexidecimal
$hexi .= sprintf("%02$x ", ord($data[$i]));
// Replace non-viewable bytes with '.'
if (ord($data[$i]) >= 32) {
$ascii .= ($htmloutput === true) ?
htmlentities($data[$i]) :
$data[$i];
} else {
$ascii .= '.';
}
// Add extra column spacing
if ($j === 7) {
$hexi .= ' ';
$ascii .= ' ';
}
// Add row
if (++$j === 16 || $i === $len - 1) {
// Join the hexi / ascii output
$dump .= sprintf("%04$x %-49s %s", $offset, $hexi, $ascii);
// Reset vars
$hexi = $ascii = '';
$offset += 16;
$j = 0;
// Add newline
if ($i !== $len - 1) {
$dump .= "\n";
}
}
}
// Finish dump
$dump .= $htmloutput === true ?
'</pre>' :
'';
$dump .= "\n";
// Output method
if ($return === false) {
echo $dump;
} else {
return $dump;
}
}
其中显示了每个字符的hexa代码以及每个空格,行,特殊转换符号或行制动器。它有助于查看真实数据。
总而言之。