草庐IT

php - MySQL编码解析错误

coder 2023-10-19 原文

<分区>

我正在尝试使用此命令添加一些文本,包含在我的 php 文件中:

$sql = "INSERT INTO $this->table_name_category (name, marker_icon) VALUES ('".$name."', '".$marker_icon."')";

在英文字符中一切看起来都很好,但在希腊字符中,解析的文本正在转换为问号“???????”

还有什么我必须注意的吗?有没有办法告诉 INSERT 命令使用 UTF8 以支持希腊字符?

提前致谢。

我的数据库设置为 utf8_unicode_ci(表也是)。

我的代码是:

<?php

class Store_locator_wpress_db {

    var $wpdb;
    var $table_name;
    var $table_name_category;

    function Store_locator_wpress_db() {
        global $wpdb;
        $this->wpdb = $wpdb;
        $this->table_name = $wpdb->prefix . "store_wpress";
        $this->table_name_category = $wpdb->prefix . "store_wpress_category";
        $this->table_name_category2 = $wpdb->prefix . "store_wpress_category2";
    }

    function setup_tables() {
        self::create_tables();
        self::update_stores_table();
        //self::update_categories_table();
    }

    function update_stores_table() {
        $sql = "DESCRIBE $this->table_name";
        $result = $this->wpdb->get_results($sql, 'ARRAY_N');

        for($i=0; $i<count($result); $i++) {
            $field[] = $result[$i][0];
        }

        if(!in_array('category_id',$field)) {
            $sql = "ALTER TABLE `$this->table_name` ADD `category_id` INT NOT NULL AFTER `post_id`";
            $this->wpdb->query($sql);
        }
        if(!in_array('category2_id',$field)) {
            $sql = "ALTER TABLE `$this->table_name` ADD `category2_id` INT NOT NULL AFTER `category_id`";
            $this->wpdb->query($sql);
        }
        if(!in_array('country',$field)) {
            $sql = "ALTER TABLE `$this->table_name` ADD `country` VARCHAR( 60 ) NOT NULL AFTER `email`";
            $this->wpdb->query($sql);
        }
        if(!in_array('city',$field)) {
            $sql = "ALTER TABLE `$this->table_name` ADD `city` VARCHAR( 60 ) NOT NULL AFTER `email`";
            $this->wpdb->query($sql);
        }
    }

    function update_categories_table() {
        $sql = "DESCRIBE $this->table_name_category";
        $result = $this->wpdb->get_results($sql, 'ARRAY_N');

        for($i=0; $i<count($result); $i++) {
            $field[] = $result[$i][0];
        }

        if(!in_array('marker_icon',$field)) {
            $sql = "ALTER TABLE `$this->table_name_category` ADD `marker_icon` VARCHAR( 200 ) NOT NULL AFTER `name`";
            $this->wpdb->query($sql);
        }
    }

    function create_tables() {
        $sql = "CREATE TABLE IF NOT EXISTS " . $this->table_name . " (
        `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
        `user_id` BIGINT NOT NULL ,
        `post_id` BIGINT NOT NULL ,
        `category_id` INT NOT NULL ,
        `name` VARCHAR( 160 ) NOT NULL ,
        `logo` VARCHAR( 160 ) NOT NULL ,
        `address` VARCHAR( 160 ) NOT NULL ,
        `lat` VARCHAR( 20 ) NOT NULL ,
        `lng` VARCHAR( 20 ) NOT NULL ,
        `url` VARCHAR( 160 ) NOT NULL ,
        `description` TEXT NOT NULL ,
        `tel` VARCHAR( 30 ) NOT NULL ,
        `email` VARCHAR( 60 ) NOT NULL ,
        `created` DATETIME NOT NULL
        ) ENGINE = MYISAM;";
        $this->wpdb->query($sql);

        $sql = "CREATE TABLE IF NOT EXISTS " . $this->table_name_category . " (
        `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
        `name` VARCHAR( 120 ) NOT NULL,
        `marker_icon` VARCHAR( 200 ) NOT NULL
        ) ENGINE = MYISAM ;";

        $this->wpdb->query($sql);

        $sql = "CREATE TABLE IF NOT EXISTS " . $this->table_name_category2 . " (
        `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
        `name` VARCHAR( 120 ) NOT NULL
        ) ENGINE = MYISAM ;";

        //$this->wpdb->query($sql);
    }

    function get_locations($criteria) {
        $lat = $criteria['lat'];
        $lng = $criteria['lng'];
        $page_number = $criteria['page_number'];
        $nb_display = $criteria['nb_display'];
        $distance_unit = $criteria['distance_unit'];
        $category_id = $criteria['category_id'];
        $category2_id = $criteria['category2_id'];
        $radius_id = $criteria['radius_id'];

        $start = ($page_number*$nb_display)-$nb_display;

        if($distance_unit=='miles') $distance_unit='3959'; //miles
        else $distance_unit='6371'; //km

        $sql = "SELECT s.*, c.marker_icon, c.name category_name,
        ( $distance_unit * acos( cos( radians('".$lat."') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('".$lng."') ) + sin( radians('".$lat."') ) * sin( radians( lat ) ) ) ) AS distance 
        FROM ".$this->table_name." s
        LEFT JOIN ".$this->table_name_category." c
        ON s.category_id=c.id
        WHERE 1 ";

        if($category_id!='') $sql .= " AND category_id='$category_id'";
        if($category2_id!='') $sql .= " AND category2_id='$category2_id'";

        if($radius_id!='') $sql .= " HAVING distance<='".$radius_id."'";

        if($lat!=''&&$lng!='') $sql .= " ORDER BY distance";
        else $sql .= " ORDER BY id DESC";

        if($nb_display!='') $sql .= " LIMIT $start, $nb_display";

        $locations = $this->wpdb->get_results($sql, 'ARRAY_A');

        return $locations;
    }

    function return_nb_stores($criteria=array()) {
        $category_id = $criteria['category_id'];

        $sql = "SELECT count(*) as nb 
        FROM $this->table_name WHERE 1";

        if($category_id!='') $sql .= " AND category_id='$category_id'";

        $results = $this->wpdb->get_results($sql, 'ARRAY_A');
        return $results[0];
    }

    function return_stores($criteria=array()) {
        $id = $criteria['id'];
        $post_id = $criteria['post_id'];
        $category_id = $criteria['category_id'];

        $sql = "SELECT s.*, c.marker_icon 
        FROM $this->table_name s
        LEFT JOIN ".$this->table_name_category." c
        ON s.category_id=c.id
        WHERE 1";

        if($id>0) $sql .= " AND s.id='$id'";
        if($post_id>0) $sql .= " AND s.post_id='$post_id'";
        if($category_id>0) $sql .= " AND s.category_id='$category_id'";

        $sql .= ' ORDER BY s.created DESC';

        $results = $this->wpdb->get_results($sql, 'ARRAY_A');
        return $results;
    }

    function return_categories($criteria=array()) {
        $id = $criteria['id'];
        $sql = "SELECT * FROM $this->table_name_category WHERE 1";
        if($id>0) $sql .= " AND id='$id'";
        $sql .= ' ORDER BY name';

        $results = $this->wpdb->get_results($sql, 'ARRAY_A');
        return $results;
    }

    function return_categories2($criteria=array()) {
        $id = $criteria['id'];
        $sql = "SELECT * FROM $this->table_name_category2 WHERE 1";
        if($id>0) $sql .= " AND id='$id'";
        $sql .= ' ORDER BY name';

        $results = $this->wpdb->get_results($sql, 'ARRAY_A');
        return $results;
    }

    function return_nb_stores_by_category() {
        $sql = 'SELECT c.id, count(*) nb 
        FROM '.$this->table_name.' s, '.$this->table_name_category.' c 
        WHERE s.category_id=c.id GROUP BY s.category_id';
        $results = $this->wpdb->get_results($sql, 'ARRAY_A');
        for($i=0; $i<count($results); $i++) {
            $storesCat[$results[$i]['id']] = $results[$i]['nb'];
        }
        return $storesCat;
    }

    function return_nb_stores_by_category2() {
        $sql = 'SELECT c.id, count(*) nb 
        FROM '.$this->table_name.' s, '.$this->table_name_category2.' c 
        WHERE s.category2_id=c.id GROUP BY s.category2_id';
        $results = $this->wpdb->get_results($sql, 'ARRAY_A');
        for($i=0; $i<count($results); $i++) {
            $storesCat[$results[$i]['id']] = $results[$i]['nb'];
        }
        return $storesCat;
    }

    function delete_store($id) {
        $user_id = get_current_user_id();
        $sql = "SELECT * FROM $this->table_name WHERE id='$id' AND user_id='$user_id'";
        $results = $this->wpdb->get_results($sql, 'ARRAY_A');
        if(count($results)>0) {
            $sql = "DELETE FROM $this->table_name WHERE id='%d'";
            $this->wpdb->query($this->wpdb->prepare($sql, $id));
            return 'The store has been deleted.';
        }
        else {
            return 'Only the author of this store, can delete it.';
        }
    }

    function delete_category($id) {
        $sql = "SELECT * FROM $this->table_name WHERE category_id='$id'";
        $results = $this->wpdb->get_results($sql, 'ARRAY_A');
        if(count($results)>0) {
            return "You cannot delete this category because it's containing ".count($results)." store(s). Please delete the stores first then try again.";
        }
        else {
            $sql = "DELETE FROM $this->table_name_category WHERE id='%d'";
            $this->wpdb->query($this->wpdb->prepare($sql, $id));
            return 'The category has been deleted.';
        }
    }

    function delete_category2($id) {
        $sql = "SELECT * FROM $this->table_name WHERE category2_id='$id'";
        $results = $this->wpdb->get_results($sql, 'ARRAY_A');
        if(count($results)>0) {
            return "You cannot delete this category because it's containing ".count($results)." store(s). Please delete the stores first then try again.";
        }
        else {
            $sql = "DELETE FROM $this->table_name_category2 WHERE id='%d'";
            $this->wpdb->query($this->wpdb->prepare($sql, $id));
            return 'The category has been deleted.';
        }
    }

    function update_store($criteria) {
        $sql = "UPDATE $this->table_name SET 
        post_id='".$criteria['post_id']."', category_id='".$criteria['category_id']."', category2_id='".$criteria['category2_id']."', 
        name='".$criteria['name']."', logo='".$criteria['logo']."', url='".$criteria['url']."', 
        address='".$criteria['address']."', lat='".$criteria['lat']."', lng='".$criteria['lng']."', 
        description='".$criteria['description']."', tel='".$criteria['tel']."', email='".$criteria['email']."'
        WHERE id='".$criteria['id']."'";
        $this->wpdb->query($sql);
    }

    function update_category($criteria) {
        $sql = "UPDATE $this->table_name_category SET name='".$criteria['name']."', marker_icon='".$criteria['marker_icon']."' 
        WHERE id='".$criteria['id']."'";
        $this->wpdb->query($sql);
    }

    function update_category2($criteria) {
        $sql = "UPDATE $this->table_name_category2 SET name='".$criteria['name']."' 
        WHERE id='".$criteria['id']."'";
        $this->wpdb->query($sql);
    }

    function add_store($criteria) {
        $sql = "INSERT INTO $this->table_name 
        (user_id, post_id, category_id, category2_id, name, logo, address, lat, lng, url, description, tel, email, created) 
        VALUES ('".$criteria['user_id']."', '".$criteria['post_id']."', '".$criteria['category_id']."', '".$criteria['category2_id']."', '".$criteria['name']."', '".$criteria['logo']."', '".$criteria['address']."', '".$criteria['lat']."', '".$criteria['lng']."', 
        '".$criteria['url']."', '".$criteria['description']."', '".$criteria['tel']."', '".$criteria['email']."', '".date('Y-m-d H:i:s')."')";
        //echo $sql.'<br>';
        $this->wpdb->query($sql);
    }

    function add_category($criteria=array()) {
        $name = $criteria['name'];
        $marker_icon = $criteria['marker_icon'];
        $sql = "INSERT INTO $this->table_name_category (name, marker_icon) VALUES ('".$name."', '".$marker_icon."')";
        $this->wpdb->query($sql);
    }

    function add_category2($criteria=array()) {
        $name = $criteria['name'];

        $sql = "INSERT INTO $this->table_name_category2 (name) VALUES ('".$name."')";
        $this->wpdb->query($sql);
    }
}

?>

有关php - MySQL编码解析错误的更多相关文章

  1. Ruby 解析字符串 - 2

    我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?

  2. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  3. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  6. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  7. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  8. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  9. ruby-on-rails - 错误 : Error installing pg: ERROR: Failed to build gem native extension - 2

    我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby​​'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe

  10. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

随机推荐