MySQL удалить пробелы перед вставкой - PullRequest
1 голос
/ 27 февраля 2011

Я новичок в MySQL.То, что я пытаюсь сделать, не кажется слишком сложным, но я не могу понять это.

Я хочу сделать 2 вещи, в настоящее время работает только одна.Во-первых, я хочу скопировать значение новой записи в другой столбец той же таблицы.Это работает.Во-вторых, я хочу посмотреть на эту новую запись и удалить все пробелы из этого нового скопированного значения и заменить их на _

. Это то, что у меня сейчас:

<?php

$con = mysql_connect("localhost","username","password");
if (!$con)
{
    die('Could not connect: ' . mysql_error());
}
mysql_select_db("testdb", $con);

$sql="INSERT INTO testtable (name, type, rating, name_copy) 
VALUES ('$_POST[name]','$_POST[type]','$_POST[rating]','$_POST[name]')";
mysql_query("UPDATE 'testtable' SET 'name_copy' = REPLACE( 'name_copy', ' ', '_' )");
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
header( 'Location: http://dev.test.com/records.php' ) ;
mysql_close($con)

?>

Обратите внимание, чточтобы скопировать значение имени, я выкладываю его дважды.Один раз в столбец имени и один раз в столбец name_copy.Не уверен, что это лучший способ скопировать значение.По сути, причина, по которой я пытаюсь это сделать, заключается в том, чтобы я мог генерировать URL-адреса из этих значений, удаляя пробелы.

Любая помощь приветствуется!

Спасибо.

Ответы [ 3 ]

0 голосов
/ 27 февраля 2011

Вы применяете ОБНОВЛЕНИЕ до ВСТАВКИ. Следовательно, ваша вновь вставленная строка никогда не обновляется, чтобы убрать пробелы. Кроме того, вы должны удалить одинарные кавычки вокруг имен столбцов.

0 голосов
/ 27 февраля 2011

Что вы должны сделать, это:

  1. Включить правильную обработку ошибок PHP. По крайней мере, установите error_handling (E_ALL) и запишите обработчик ошибок, который выкладывает ошибку, очень подробно, в файл журнала и вызывает остановку страницы. В настоящее время вы «заряжаете голову катастрофой», полностью игнорируя возможность ошибки. Лично я бы использовал PDO и установил бы PDO :: ATTR_ERRMODE в PDO :: ERRMODE_EXCEPTION.

  2. Понять SQL-инъекцию и то, как ваша страница уязвима к ней (см. Комментарии других). Когда вы поймете это, вы, вероятно, захотите использовать параметризованные запросы (PDO может это сделать - см. Мой первый пункт).

  3. Попытайтесь решить, в своей голове, что вы действительно пытаетесь сделать.

Я думаю, что достаточно сделать замену строк для переменных на странице, а затем использовать их в качестве параметров для вставки. Нет необходимости вставлять строку, затем ОБНОВЛЯТЬ ее (или, как вы уже пытались, ОБНОВИТЬ каждую строку в таблице!)

0 голосов
/ 27 февраля 2011
mysql_query("UPDATE 'testtable' SET 'name_copy' = REPLACE( 'name_copy', ' ', '_' )");

Удалите одинарные кавычки вокруг имени столбца или измените их на обратные черты:

mysql_query("UPDATE 'testtable' SET `name_copy` = REPLACE( 'name_copy', ' ', '_' )");

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

$sql = "INSERT INTO testtable (name, type, rating, name_copy) VALUES ".
       "('$name','$type','$rating','".str_replace(' ', '_', trim($name))."')";

Кстати, НЕ забудьте экранировать переменные перед вставкой в ​​базу данных!Ищите его, если не знаете как, это часто задаваемый вопрос.


РЕДАКТИРОВАТЬ:

<?php

$con = mysql_connect("localhost","username","password");
if (!$con)
{
    die('Could not connect: ' . mysql_error());
}
mysql_select_db("testdb", $con);

$sql = "INSERT INTO testtable (name, type, rating, name_copy) VALUES ".
       "('$name','$type','$rating','".str_replace(' ', '_', trim($name))."')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
header( 'Location: http://dev.test.com/records.php' ) ;
mysql_close($con);

?>
...