У меня есть следующий массив:
Array
(
[0] => &dwA-nTr&
[1] => @nswt@
[2] => *DI.2,8*
[3] => dwA
[4] => nTr
[5] => sp
[6] => fdw
[7] => @jHj@
[8] => *DI.2,9*
[9] => jHj
[10] => wr
[11] => sA
[12] => Hw,t-Hrw
[13] => jrj
[14] => sSS,t
[15] => n
[16] => mw,t
[17] => =f
[18] => wsr,t
[19] => @nswt@
[20] => *DI.2,10*
[21] => nswt-bj,t.j
Цель состоит в том, чтобы вставить эти данные в таблицу mysql. Каждое слово, начинающееся с '&', является СЦЕНОЙ; начинающееся с '@' - это БОЖЕСТВЕННОЕ, а начинающееся с '*' - АТТЕСТАЦИЯ. остальные слова являются обычными словами. В таблице 5 полей: ID (который является первичным ключом), Word, Attestation, Scene, Divinite. Таким образом, каждое обычное слово должно быть указано в поле «Слово», а остальные поля должны быть заполнены соответствующей информацией выше. Таким образом, две первые строки должны выглядеть так:
ID Word Attestation Scene Divinite
1 dwA DI.2,8 dwA-nTr nswt
2 nTr DI.2,8 dwA-nTr nswt
3 sp DI.2,8 dwA-nTr nswt
4 fdw DI.2,8 dwA-nTr nswt
5 jHj DI.2,9 dwA-nTr jHj
6 wr DI.2,9 dwA-nTr jHj
7 sA DI.2,9 dwA-nTr jHj
8 Hw,t-Hrw DI.2,9 dwA-nTr jHj
9 jrj DI.2,9 dwA-nTr jHj
10 sSS,t DI.2,9 dwA-nTr jHj
11 n DI.2,9 dwA-nTr jHj
12 mw,t DI.2,9 dwA-nTr jHj
13 =f DI.2,9 dwA-nTr jHj
14 wsr,t DI.2,9 dwA-nTr jHj
15 nswt-bj,t.j DI.2,10 dwA-nTr nswt
Для этого я написал следующее:
mysql_select_db("my_db", $con);
$SceneTitle = $InitSceneTitle;
foreach($TextsansBracRenumer as $word)
{
if ($word[0] === "@")
{
$Divinite = str_replace("@", "", $word);
}
if ($word[0] === "&")
{
$SceneTitle = str_replace("&", "", $word);
}
if ($word[0] === "*")
{
$position = str_replace("*", "", $word);
}
else
{
$SceneInfo = $position;
$insert="INSERT INTO Words (Word, Attestation, Scene, Divinite) VALUES ('$word', '$position', '$SceneTitle', '$Divinite')";
mysql_query($insert) OR die(mysql_error());
}
И это работает нормально.
Но когда я хочу искать данные, начинаются проблемы. Я написал следующее (таблица называется Words)
mysql_select_db("my_db", $con);
$search = "SELECT Word, Scene, Attestation, Divinite
FROM Words
WHERE Word = '$target' ";
$retval = mysql_query($search, $con);
if(! $retval )
{
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
echo
"{$row['Attestation']} <br> ";
}
Итак, для слова X он даст мне подтверждение. Поэтому, если я заменю $target на слово 'dwA', он даст мне 'DI.2,8'. И если я заменю последнее предложение "{$row['Attestation']} на "{$row['Divinite'] } он даст мне 'nswt'. и так далее.
Это хорошо работает, но когда я хочу, я заменяю поиск
$search = "SELECT Word, Scene, Attestation, Divinite
FROM Words
WHERE Word = '$target' ";
От
$search = "SELECT Word, Scene, Attestation, Divinite
FROM Words
WHERE Scene = '$target' ";
Это не работает. Поэтому, если я заменю $target на dwA-nTr, он должен дважды дать мне DI.2,8. и это не работает для Attestation или Divinite. На самом деле это работает только для Word. Я пытаюсь вставить данные вручную, и это работает. Так что дело скорее не в программе поиска, а в том, как данные помещаются в таблицу. Кто-нибудь знает, как вводить данные другим способом? чтобы это работало
Я думаю, что нашел проблему, но не решение. Я экспортировал базу данных с помощью SQL, и вот что я получаю:
CREATE TABLE `Words` (
`ID` mediumint(15) NOT NULL AUTO_INCREMENT,
`Word` varchar(15) NOT NULL,
`Attestation` varchar(15) NOT NULL,
`Scene` varchar(15) NOT NULL,
`Divinite` varchar(15) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ;
--
-- Dumping data for table `Words`
--
INSERT INTO `Words` VALUES(3, 'dwA', 'DI.2,8\r', 'dwA-nTr\r', 'nswt\r');
INSERT INTO `Words` VALUES(4, 'nTr', 'DI.2,8\r', 'dwA-nTr\r', 'nswt\r');
INSERT INTO `Words` VALUES(5, 'sp', 'DI.2,8\r', 'dwA-nTr\r', 'nswt\r');
INSERT INTO `Words` VALUES(6, 'fdw\r', 'DI.2,8\r', 'dwA-nTr\r', 'nswt\r');
INSERT INTO `Words` VALUES(8, 'jHj', 'DI.2,9\r', 'dwA-nTr\r', 'jHj\r');
INSERT INTO `Words` VALUES(9, 'wr', 'DI.2,9\r', 'dwA-nTr\r', 'jHj\r');
INSERT INTO `Words` VALUES(10, 'sA', 'DI.2,9\r', 'dwA-nTr\r', 'jHj\r');
INSERT INTO `Words` VALUES(11, 'Hw,t-Hrw', 'DI.2,9\r', 'dwA-nTr\r', 'jHj\r');
INSERT INTO `Words` VALUES(12, 'jrj', 'DI.2,9\r', 'dwA-nTr\r', 'jHj\r');
INSERT INTO `Words` VALUES(13, 'sSS,t', 'DI.2,9\r', 'dwA-nTr\r', 'jHj\r');
INSERT INTO `Words` VALUES(14, 'n', 'DI.2,9\r', 'dwA-nTr\r', 'jHj\r');
INSERT INTO `Words` VALUES(15, 'mw,t', 'DI.2,9\r', 'dwA-nTr\r', 'jHj\r');
INSERT INTO `Words` VALUES(16, '=f', 'DI.2,9\r', 'dwA-nTr\r', 'jHj\r');
INSERT INTO `Words` VALUES(17, 'wsr,t\r', 'DI.2,9\r', 'dwA-nTr\r', 'jHj\r');
INSERT INTO `Words` VALUES(19, 'nswt-bj,t.j', 'DI.2,10\r', 'dwA-nTr\r', 'nswt\r');
INSERT INTO `Words` VALUES(21, 'Hnk', 'DI.9,8', 'Hnk-wnHr', 'jHj');
Как вы можете видеть, после каждого «Аттестации», «Сцены» и «Божественного» идет \r. Это, вероятно, объясняет, почему я могу искать, например, слово «dwA», но не сцену dwA-nTr. но поиск по dwA-nTr\r тоже не работает. НО, как вы можете видеть в 21 строке, которую я вставил вручную, этот \r отсутствует
1 ответ
Я все еще изучаю ваш пост, но мы можем начать с этого?:
foreach($TextsansBracRenumer as $word)
{ # changed to else..if since $word[0] is only one value, right? let me know
if ($word[0] === "@")
{
$Divinite = str_replace("@", "", $word);
}
else if ($word[0] === "&")
{
$SceneTitle = str_replace("&", "", $word);
}
else if ($word[0] === "*")
{
$position = str_replace("*", "", $word);
}
}
# just imagining pulling this out of your code, assuming that the foreach above handled the word-processing
$SceneInfo = $position;
$insert="INSERT INTO Words (Word, Attestation, Scene, Divinite) VALUES ('$word', '$position', '$SceneTitle', '$Divinite')";
mysql_query($insert) OR die(mysql_error());
Я хотел бы попросить больше кода, например:
Каково значение $InitSceneTitle
? каково значение $TextsansBracRenumer
?
[править] [на основе новой информации: вставленные данные строки]
Попробуйте заменить это:
$Divinite = str_replace("@", "", $word);
С этим:
$Divinite = str_replace("\n",'', str_replace("\r",'', str_replace("@", "", $word)));
Кажется, что данные в вашем массиве содержат символы новой строки и возврата каретки, представленные \n
и \r
соответственно. Вам придется их заменить. Что это выявляет, так это... Как массив заполняется данными? Потому что, если мы не будем осторожны, эти два (\n и \r) могут остаться или должны остаться в ваших данных. Если это так, то мы изменим наш подход.
А пока... сделайте то же самое для слова, сцены и аттестации. А затем снова выполните поиск.. Дайте мне знать, что произойдет...
@
или &
, но если ни один из них не встречается, вы затем проверьте *
, и если вы не найдете *
(забудьте об остальных, потому что они не находятся в else if
корпусах, вы затем вставляете. Вот почему я прошу образцы данных . Поскольку ваша команда INSERT
находится внутри foreach
, я задался вопросом, может быть, потому, что я, к сожалению, не понимаю ее в настоящее время.. Не могли бы вы повторить $insert
также до того, как вы его выполните?
Похожие вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.
$target
? Некоторые фактические данные в результате ваших команд вставки были бы хорошим началом для проверки, а также ручного запуска ваших команд SQL в вашем клиенте SQL (например, phpMyAdmin)