2014-02-27 101 views
0

我有一個程序,我需要根據需要插入單詞,然後通過數據庫檢查這些單詞,如果它存在於數據庫中,它應返回多少在數據庫中存在的詞。 請告訴我,什麼是錯的這個代碼,它是不相似的條目數返回數據庫無法將數據庫中的數據與字符串數組進行比較

<html> 
<head> 

<script language="javascript" type="text/javascript"> 
// Pre-defined text: 
var newtext = "This is the new text"; 
// Drop-Menu: 
var newtext = myform.mymenu.options[myform.mymenu.selectedIndex].value; 
// Prompt: 
var newtext = prompt('Enter New Text Here:', ''); 
function addtext() { 
    var newtext = document.myform.inputtext.value; 
    document.myform.outputtext.value += newtext+'&nbsp;'; 
} 

</script> 
</head> 
<body> 
<form name="myform" action="" method="post"> 
<table border="0" cellspacing="0" cellpadding="5"><tr> 
<td><textarea name="inputtext"></textarea></td> 
<input type="radio" name="placement" value="append" checked> Add to Existing Text<br> 
<td><p><input type="radio" name="placement" value="replace"> Replace Existing Text<br> 
<input type="button" value="Add New Text" onClick="addtext();"></p> 
</td> 
<td><textarea name="outputtext"></textarea></td> 
</tr></table> 
<input type="submit"/> 
</form> 
<?php 
$string=$_POST['outputtext']; 
$array=array(); 
$array=explode(';',$string); 
@ $db=new mysqli('localhost','root','','words'); 
if(mysqli_connect_errno()) 
{ 
    echo 'Error:Could not connect to the database'; 
} 
else 
echo 'connected'; 
$db->select_db('words'); 
$count = 0; 
foreach($array as $s) 
{  
    $query="select * from collection where word LIKE '%".$s."%'"; 
    $result=$db->query($query); 
    if($result) 
    $count += $db->num_rows;  
} 
echo $count; 
$db->close(); 
?> 
</body> 
</html> 
+0

你不是在你的查詢中使用'$ s'運行在for循環的話,你可以試試下面的解決方案查詢。 – Barmar

+0

它沒有顯示我在textarea中輸入的單詞數量已經在數據庫中。 – Vivek

+0

$ array存儲輸入的單詞。 – Vivek

回答

0
$count = 0; 
foreach($array as $s) 
{  
    $query="select count(*) as num_matched from collection where word LIKE '%".$s."%'"; 
    $result=$db->query($query) or die($db->error); 
    $row = $result->fetch_assoc(); 
    $count += $row['num_matched']; 
} 
echo $count; 

您還應該切換到參數化查詢,而不是直接使用輸入。

$stmt = $db->prepare("select count(*) 
         FROM collection 
         WHERE word LIKE CONCAT('%', ?, '%')"); 
$stmt->bind_param("s", $s); 
$count = 0; 
foreach ($array as $s) { 
    $result = $stmt->execute(); 
    $stmt->bind_result($num_matched); 
    $stmt->fetch(); 
    $count += $num_matched; 
} 
echo $count; 
+0

它返回我在數據庫中的條目數量,而不是匹配的條目數量。 – Vivek

+0

它不應該。它應該只計算匹配的條目。嘗試打印'$ query'並確保它包含您在'LIKE'子句中所期望的內容。 – Barmar

0

$db->num_rows已經是行數......你並不需要手動計數。

0

其不可行

$array=array('abc','xyz','lmn','pqr');  
$query="select word from collection where word LIKE '%".$s."%'"; 
$result=$db->query($query); 
while ($row = mysql_fetch_array($result)) 
{ 
    $tblarray[] = $row['word']; 
} 
foreach($tblarray as $k => $v) 
{ 
    foreach($array AS $key => $value) 
    { 
    if (strpos($v, $value) !== false) 
    { 
     $finalarray[] = $v; 
    } 
    } 
} 
echo sum($finalarray); 
相關問題