插入和搜索数据

时间:2011-11-24 15:38:34

标签: php mysql search input

我有以下数组:

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不存在

1 个答案:

答案 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)可能必须或应该保留在您的数据中。如果是这样,那么我们将改变我们的方法。

现在......对单词,场景和证明做同样的事情。然后再次执行搜索..让我知道会发生什么......