Как подготовить строки для вставки в качестве значений в таблицу MySQL?

Я пытаюсь вставить некоторые строки, содержащие дефисы и апострофы, в качестве значений в таблицу MySQL. Я назначаю строковое значение:

$venue_name = addslashes(get_the_title($id)); 

Когда я повторяю значение, я получаю:

 4B's Brewery 

а также

 Ace Hardware - Bailey 

Мои операторы SQL выглядят следующим образом:

  INSERT INTO wp_w2bw2c_venue (id, market_id, venue_status, venue_name, website, address_1, address_2, city, state, postal_code, phone, fax, email, logo_attachment_id, featured_image_attachment_id, tagline, description, doors_open, capacity, venue_type_id, salesperson_id, landing_page_id) VALUES (817, 7, 'Active', '4B's Brewery', 'http://4bsbrewery.com/', '215 W Main St', '', 'Cedaredge', 'Colorado', '81413', '970-856-7762', '', '', 0, 0, '', '', '', 0, '168', 89, 0) INSERT INTO wp_w2bw2c_venue (id, market_id, venue_status, venue_name, website, address_1, address_2, city, state, postal_code, phone, fax, email, logo_attachment_id, featured_image_attachment_id, tagline, description, doors_open, capacity, venue_type_id, salesperson_id, landing_page_id) VALUES (915, 7, 'Active', 'Ace Hardware – Bailey', '', 'Moore Lumber & Hardware', '', 'Bailey', 'Colorado', '', '720-924-3999', '', '', 0, 0, '', '', '', 0, '168', 89, 0) 

я использую

 dbDelta($sql); 

для обновления базы данных.

Но я получаю такие ошибки базы данных:

  WordPress database error: [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''4B&#8217' at line 4] INSERT INTO wp_w2bw2c_venue (id, market_id, venue_status, venue_name, website, address_1, address_2, city, state, postal_code, phone, fax, email, logo_attachment_id, featured_image_attachment_id, tagline, description, doors_open, capacity, venue_type_id, salesperson_id, landing_page_id) VALUES (817, 7, 'Active', '4B&#8217 WordPress database error: [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Ace Hardware &#8211' at line 4] INSERT INTO wp_w2bw2c_venue (id, market_id, venue_status, venue_name, website, address_1, address_2, city, state, postal_code, phone, fax, email, logo_attachment_id, featured_image_attachment_id, tagline, description, doors_open, capacity, venue_type_id, salesperson_id, landing_page_id) VALUES (915, 7, 'Active', 'Ace Hardware &#8211 

Специальные символы 'и – завершают строки. Я пробовал addlashes (), str_replace ('-', '- ", $ place_name) и mysql_real_escape_string (), без каких-либо успехов. Как подготовить строки для принятия в качестве значений столбца таблицы MySQL VARCHAR?

dbDelta действительно предназначен для создания баз данных или таблиц, а не для вставки записей.

Я бы предложил использовать $wpdb->insert() , который позволит избежать значений для вас:

 $wpdb->insert( $wpdb->prefix . 'w2bw2c_venue', array( 'market_id' => 7, 'venue_name' => get_the_title( $id ), ), array( '%d', '%s', ) ); 

Я только что использовал поле имени, в котором у вас были проблемы, в моем примере, очевидно, вы захотите заполнить остальные. Я включил market_id, чтобы показать правильное использование второго массива $format , гарантируя, что market_id анализируется как целое число.