插入和搜索数据

问题描述 投票:0回答:1

我有以下数组:

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

php mysql search input
1个回答
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的值是多少?

[编辑] [基于新信息:插入的行数据]

尝试替换此:

$Divinite = str_replace("@", "", $word);

使用此:

$Divinite = str_replace("\n",'', str_replace("\r",'', str_replace("@", "", $word)));

似乎数组中的数据包含换行符和回车符,分别由\n\r表示。您必须替换它们。揭露的是...如何用数据填充数组?因为如果我们不小心,那么这两个(\ n和\ r)可能必须保留或应该保留在您的数据中。如果真是这样,那么我们将改变我们的方法。

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

© www.soinside.com 2019 - 2024. All rights reserved.