我有以下数组:
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表中。每个以&开头的单词都是一个SCENE;以'@'开头是DIVINITE,以'*'开头是ATTESTATION。其他单词是常规单词。该表有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());
}
这很好。但是当我要搜索数据时,麻烦就开始了。我写了以下内容(表称为单词)
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' ";
不起作用。因此,如果我用dwA-nTr代替$ target,他应该给我两次DI.2,8。并且不适用于证明或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');
正如您在每个“ Attestation”,“ Scene”和“ Divinite”之后都看到一个\ r。这很好地解释了为什么我可以搜索单词“ dwA”而不搜索场景dwA-nTr。但是在dwA-nTr \ r上搜索也不起作用。如您在21中看到的,我手动插入的行,此\ r不存在
我仍在研究您的帖子,但是我们可以从这个开始吗?:
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)可能必须保留或应该保留在您的数据中。如果真是这样,那么我们将改变我们的方法。
目前。.对单词,场景和证明做同样的事情。然后再次执行搜索。.让我知道会发生什么...