MySQL PHP mysql_real_escape_string () - это значение не строка?

0

Я пытаюсь обновить запись с информацией из поля множественного выбора, я работал нормально, когда я использовал 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 = '".....)

  • 2
    Можете ли вы опубликовать код, который присваивает $ стратегии и $ id?
  • 1
    Я думаю, вам нужно проверить код, который устанавливает переменные $ id и $ стратегии. В противном случае трудно сказать, какой из них вызывает ошибку. Вы должны были включить некоторый соответствующий код до генерации строки запроса.
Показать ещё 2 комментария
Теги:
string

3 ответа

3

Похоже, что $strategy - это массив, а не строка. Поскольку у вас есть многоэкранный выбор, если они выбирают несколько элементов, $стратегии возвращаются как массив.

Это сводится к тому, как вы хотите сохранить несколько выборов в этом столбце единой базы данных. Если вы просто хотите добавить выделение вместе в одну большую строку, используйте команду 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) . "'"; 

ETA:

В стороне, то, что вы здесь делаете, выглядит очень страшно. У вас есть html-ссылка для значения в опции окна выбора, которую вы затем сохраняете в базе данных (предположительно для отображения позже?).

Это действительно открывает себя для тривиальной атаки XSS, когда кто-то подает фальшивую форму со своими опциями, содержащими ссылки на сайт атаки, которые вы счастливо храните в своей БД и позже показываете на своем сайте.

Сохраните идентификатор (или список идентификаторов в вашем случае) или что-то в своей базе данных, а затем создайте ссылки позже, когда вам нужно их отобразить.

0

Он жалуется, что $Strategies/$id является массивом и должен быть строкой.

0

Я думаю,

$id не является строкой

mysql_real_escape_string($id)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню