代码之家  ›  专栏  ›  技术社区  ›  PrismaPixel Studios

PHP中查询的MySQL查询

  •  0
  • PrismaPixel Studios  · 技术社区  · 7 年前

    我试图找到最有效的方法来查询查询结果,我在网上找到的每一个解决方案都会产生1064错误。我不明白我做错了什么。

    $sql = "SELECT keys.* FROM (SELECT * FROM calendar WHERE event_key LIKE '".$eventKey."%') keys WHERE event='".$eventTitle."'";
    

    上一次我尝试的是:

    $sql = "SELECT *(events) FROM (SELECT * AS events FROM calendar WHERE event_key LIKE '201974000') WHERE event='Event Name' AS lineitems";
    

    我在phpMyAdmin中得到的最后一个错误是:

    SQL查询:

    其中event_key如'201974000')作为行项目限制为0,25

    1064-您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册以了解正确的语法 near'(events)FROM(选择*作为日历中的事件,其中event_键 比如1号线的“201974000”

    我要做的是像这样查询我的数据库:

    $sql = "SELECT * FROM calendar WHERE event_key LIKE '".$eventKey."%'";
    

    $sql = "SELECT * FROM <<RESULTS>> WHERE event='".$eventTitle."'";
    

    我哪里弄错了?

    注: 我也试过:

    $sql = "SELECT * FROM calendar WHERE (event_key LIKE '".$eventKey."%' AND event='".$event."'";
    

    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Untitled Document</title>
    </head>
    
    <body>
        <?php
    
        function imageCorrection($string){
            $find = array("file/d/","/view?usp=drive_web");
            $replace = array("uc?id=","");
            $string = str_replace($find,$replace,$string);
            return $string;
        }
    
        function seoUrl($string){
            $src = 'àáâãäçèéêëìíîïñòóôõöøùúûüýÿßÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝ';
        $rep = 'aaaaaceeeeiiiinoooooouuuuyysAAAAACEEEEIIIINOOOOOOUUUUY';
            $find = array("the","and");
            $replace = array("");
            $string = strtr(utf8_decode($string),utf8_decode($src),$rep);
            $string = strtolower($string);
            $string = str_replace("");
            $string = str_replace($find,$replace,$string);
            $string = preg_replace("/[^a-z0-9\s._-]/","",$string);
            $string = preg_replace("/[\s._-]+/"," ",$string);
            $string = preg_replace("/[\s]/","-",$string);
            $string = "/events/".$string;
            if($string = "/events/"){
                $string = null;
            }
            return $string;
        }
    
        $year = date('Y');
        $lastYear = date('Y',strtotime("last year"));
        $nextYear = date('Y',strtotime("next year"));
        date_default_timezone_set('America/Anchorage');
        $eventTimeZone = new DateTimeZone("America/Anchorage");
        $currentTime = new DateTime("now",$eventTimeZone);
        $eventTimeOffset = $eventTimeZone->getOffset($currentTime);
        use Sabre\VObject;
        include '../../vendor/autoload.php';
    
        $vcalendar = VObject\Reader::read(fopen('https://calendar.google.com/calendar/ical/i8j5d94tpgnnqu6h8q3mt6uc48%40group.calendar.google.com/public/basic.ics','r'));
        $vcalendar = $vcalendar->expand(new DateTime('2018-01-01'), new DateTime('2020-12-31'));
    
        $servername = "localhost";
        $username    = "#########";
        $password    = "#########";
        $dbname  = "#########";
    
        // Create connection
        $connection = new mysqli($servername, $username, $password, $dbname);
    
        // Check connection
        if ($connection->connect_error){
            die("Connection to calendar failed: " . $connection->connect_error);
        }
    
        foreach($vcalendar->VEVENT as $event){
            $eventTitle = $event->SUMMARY;
            $eventStart = strtotime($event->DTSTART);
            $eventEnd   = strtotime($event->DTEND);
            $eventDesc  = $event->DESCRIPTION;
            $eventLocat = $event->LOCATION;
            $eventImage = imageCorrection($event->ATTACH);
            $eventKey   = date('YzB',$eventStart);
            $eventURL   = seoUrl($eventTitle);
            echo $eventKey."<br>";
            echo $eventTitle."<br>";
            echo $eventURL."<br>";
            echo $eventDesc."<br>";
            echo $eventLocat."<br>";
            echo $eventImage."<br>";
            echo date('m-d-Y h:ia',$eventStart)."<br>";
            echo date('m-d-Y h:ia',$eventEnd)."<br>";
    
    
            $sql = "SELECT * FROM calendar WHERE event_key LIKE '".$eventKey."%' AND event='".$eventTitle."'";
            $update = "UPDATE calendar SET url='".$eventURL."',image='".$eventImage."',description='".$eventDesc."',location='".$eventLocat."',start_date='".$eventStart."',end_date='".$eventEnd."',color='FFB819' WHERE (event_key LIKE '".$eventKey."%' AND event='".$eventTitle."')";
            $insert = "INSERT INTO calendar VALUES ('".$eventNum."', '".$eventTitle."', '".$eventURL."', '".$eventImage."', '".$eventDesc."', '".$eventLocat."', '".$eventStart."', '".$eventEnd."', 'FFB819')";
    
            $query = $connection->query($sql);
            echo "Query Results: ".$query->num_rows."  EventKey: ".$eventKey."  ".$eventTitle."<br>";
            if($query->num_rows > 0){
                echo "Rows: ==".$query->num_rows."<br>";
                $updateQUERY = $connection->query($update);
            }else{
                echo "Rows: #".$query->num_rows."<br>";
                $key = "SELECT * FROM calendar WHERE event_key LIKE '".$eventKey."%'";
                $query2 = $connection->query($key);
                if($query2->num_rows > 0){
                    $eventNum = $query2->num_rows;
                    $eventNum++;
                    echo "Query 2 Rows: ##".$eventNum."<br>";
                }else{
                    $eventNum = 0;
                    echo "Query 2 Rows: #".$eventNum."<br>";
                }
                if($eventNum < 10){
                    $eventNum = "00".$eventNum;
                }elseif($eventNum < 100){
                    $eventNum = "0".$eventNum;
                }
                $eventNum = $eventKey.$eventNum;
                echo "Event#: ".$eventNum."<br>";
                $insertQUERY = $connection->query($insert);
            }
            echo "==============================================================================<br>";
        }
    
    
        ?>
    </body>
    </html>
    

    所有的回显线都是为了测试目的,只是为了跟踪代码的执行。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Tofunmi    7 年前

    我认为在这个实例中运行子查询是多余的。既然你只想找到 其中event='$eventTitle'

    $sql = "SELECT * FROM calendar WHERE `event_key` LIKE '%$eventKey%' AND `event` = '$eventTitle'";
    

    注意:注意我没有使用点连接;因为围绕整个查询的双引号允许在其中使用PHP变量。