我正在尝试使用多个选择框中的信息更新记录,当我使用 INSERT INTO 添加新行时,它工作正常,但现在我正在尝试将其添加到以下代码中使用 mysql_real_escape_string() 它返回本文底部的错误消息。我认为我试图传递给它的值有问题,但我不知道如何格式化它以使 PHP 满意!
$query = "UPDATE studies
SET strategies = '" . mysql_real_escape_string($strategies) . "' WHERE id = '" . mysql_real_escape_string($id) . "'";
while($row = mysql_fetch_array($result)) {
$strategylist = $row['name'];
$strategyname = htmlspecialchars($row['name']);
$pagelink = str_replace(" ","_",$strategylist);
echo '<option value="<a href="strategies.php?strategy=' . $pagelink . '">'.$strategyname.'</a>" >' . $strategyname . '</option>' . '\n';
}
警告:mysql_real_escape_string() 期望参数 1 为第 100 行给出的字符串、数组(即上面开始 SET 策略 ='"..... 的行)
最佳答案
看起来 $strategies 是一个数组而不是一个字符串。由于您有一个多选框,如果他们选择多个项目,$strategies 将以数组形式返回。
这取决于您希望如何在单个数据库列中存储多个选择。如果您只想将所选内容附加到一个大字符串中,请使用 implode():
// Sets strategies to a comma-separated list of selected strategies.
$query = "UPDATE studies
SET strategies = '" .
mysql_real_escape_string(is_array($strategies) ? implode(',', $strategies) : $strategies) . "'
WHERE id = '" . mysql_real_escape_string($id) . "'";
预计到达时间:
顺便说一句,你在这里所做的事情看起来真的很可怕。您有一个选择框选项上的值的 html 链接,然后将其存储在数据库中(可能稍后显示?)。
这确实让自己容易遭受微不足道的 XSS 攻击,其中有人提交了一个带有自己选项的虚假表单,其中包含指向攻击站点的链接,您可以愉快地将其存储在数据库中并稍后显示在您的站点上。
在数据库中存储 ID(或您的情况下的 ID 列表)或其他内容,然后在需要显示链接时构建链接。
关于php - MySQL PHP mysql_real_escape_string() - 这个值不是字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1068913/