2013-06-19 119 views
0

好吧,我有一个PHP脚本,这里面的语法的UPDATE到一个表在MySQL:正确的语法时才/ methof

mysqli_query($con,"UPDATE ted SET description=$line[5] 
    WHERE speaker='$speaker' AND event='$event'"); 

是否有服用点错呢?它运行正常在我scriipt(没有错误的),但是没有更新,即使做:它被称为多次(并具有符合WHERE条件这行)继承人整个脚本

<?php 
$contents = file_get_contents('ted_csv.txt'); 
$con=mysqli_connect("localhost","root","admin","Media2net"); 
if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
$result = mysqli_query($con,"SELECT * FROM ted"); 

$i=0; 
while($row = mysqli_fetch_array($result)) 
{ 
    $speaker =$row['speaker']; 
    $event =$row['event']; 
    $pattern2 = preg_quote($speaker, '/'); 
    $pattern1 = preg_quote($event, '/'); 
    $pattern1 = "/^.*$pattern1.*\$/m"; 

    $pattern2 = "/^.*$pattern2.*\$/m"; 

    if(preg_match_all($pattern1, $contents, $matches)){ 
      $submatch = implode("\n", $matches[0]); 

     if (preg_match_all($pattern2, $submatch, $better)){ 
      echo "got match" . $i . "\n"; 
      $line =str_getcsv($better[0][0]); 

      $a_bool = mysqli_query($con,"UPDATE ted SET description=$line[5] 
      WHERE speaker='$speaker' AND event='$event'"); 
      if ($a_bool){ 
      echo "got match" . $i . "\n"; 
      }else{ 
      echo "query unsuccesful for match" . $i . "\n"; 
      } 

     } 
    } 

    $i++; 
}//end of while loop results 
mysqli_close($con); 
?> 

正如你可以看到比赛应该作为同一个字符串的$speaker and $event从表特德

拉动,显然有什么东西错了我的语法为每个查询$a_bool是假的,导致echo "query unsuccessful for match" . $i . "\n"被称为为每个查询。任何解释我做错了将不胜感激!

+1

试'$ a_bool = mysqli_query($ CON,“UPDATE泰德SET描述= {$线[5]}其中扬声器= '$扬声器' AND event ='$ event'“);''你需要使用{}来引用一个字符串内的外部数组元素或未被取消查询的元素,例如'description =”。$ line [5]。 AND' – Dave

+0

@Dave没有运气,只是增加了'{$ line [5]}'change – brendosthoughts

+1

不要忘记它的字符串也需要在单引号内,正如惠普在下面所说的''{$ line [5 ]}'' – Dave

回答

2

SET description=$line[5]应在引号

mysqli_query($con,"UPDATE ted SET description='{$line[5]}' 
WHERE speaker='$speaker' AND event='$event'"); 
+0

@ØHanky PankyØhey这种工作大约有一半时间......'{}'确实会将相同的概念添加到事件和说话人(两个字符串)中是否会导致所有匹配? – brendosthoughts

+0

问题是那些引号,而不是'{}'。如果必须在引用字符串内插入数组值,则使用这些大括号。对于双引号内的普通变量,他们不需要 –

+0

@ØHanky PankyØ好吧我会尽快接受你的回答S.O.允许我......是否有任何理由认为每个通过while循环的迭代都不应该在表中找到匹配项,因为'WHERE'匹配的值从表中被拉出来了? – brendosthoughts