php - MySQL PHP mysql_real_escape_string() - 这个值不是字符串吗?

标签 php mysql string

我正在尝试使用多个选择框中的信息更新记录,当我使用 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=&quot;strategies.php?strategy=' . $pagelink . '&quot;>'.$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/

相关文章:

php - laravel - 谷歌分析 API 身份验证

php - 重用 Sprintf 参数或 PHP 中的替代方案

php - SQL : selecting customers that haven't had an entry in past 2 weeks

mysql - 通过ODBC在SSRS报告中调用带有参数的MySQL存储过程

python - 如果字符串由单词列表中的单词组成,则匹配没有空格的字符串

c++ - 为什么 string::resize 和 string::substr O(1)

php - 如何使用 Laravel Eloquent 查询获取一张表中一行的两列

php - 有没有办法让 PHP 子类继承属性(静态和实例)?

mysql - 为什么触发器不在架构范围内?

c++ - 反转字符串的递归方法