【发布时间】:2012-01-05 18:22:05
【问题描述】:
我有以下数组:
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 字,他会给我证明。所以如果我用'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。 它不适用于 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 不存在
【问题讨论】:
-
什么不起作用?你能发布来自数据库的真实数据,而不仅仅是它应该是什么样子吗?
-
您确认插入的数据正确吗?您是否手动更改了
$target的值?作为插入命令的结果的一些实际数据将是一个很好的开始检查,以及在 SQL 客户端(例如 phpMyAdmin)中手动运行 SQL 命令 -
@Nonym:phpMyAdmin 中的手动搜索也不起作用。如果我手动插入一行,例如 4 - sp(=Word) - DI.8,5(=Attestation) - dwA-nTr(=Scene) - Hr(=Divinite);搜索“dwA-nTr”并询问证明给了我:“DI.8,5”实际上他应该给我所有证明,因为所有行在“场景”字段中都有 dwA-nTr。但他只给了我手动插入的行的“证明”字段。这让我觉得问题与数据的输入有关。如果我手动填写每一行,它会起作用。但是数组太长,无法手动放入
-
我扩展了数据库的示例,以了解它的外观,但再一次,如果我使用 phpMyAdm 手动插入所有数据,它会起作用,但这当然会需要很长时间