我有以下数组:
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,证明,场景,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,他会给我证明。因此,如果我用'dwA'替换$ target,他会给我'DI.2,8' 如果我用“{$ row ['Divinite']}替换最后一句”{$ row ['Attestation']},他会给我'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');
正如您在每次'证明'后看到的那样,'场景'和'Divinite'会出现\ r \ n。这可以解释为什么我可以搜索单词'dwA'而不是场景dwA-nTr。但搜索dwA-nTr \ r也不起作用。 如你在21中看到的那样,我手动插入的行,这个\ r \ n不存在
答案 0 :(得分:0)
我还在研究你的帖子,但我们可以从这开始吗?:
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
的价值是什么?
[edit] [基于新信息:插入行数据]
尝试替换它:
$Divinite = str_replace("@", "", $word);
有了这个:
$Divinite = str_replace("\n",'', str_replace("\r",'', str_replace("@", "", $word)));
您的数组中的数据似乎包含新行和回车符,分别由\n
和\r
表示。您必须替换它们。这会带来什么......阵列是如何填充数据的?因为如果我们不小心,那么这两个(\ n和\ r)可能必须或应该保留在您的数据中。如果是这样,那么我们将改变我们的方法。
现在......对单词,场景和证明做同样的事情。然后再次执行搜索..让我知道会发生什么......