То, как создать безопасный mysql, подготовило оператор в php?

Самый простой из всех решений:

  • Откройте файл csv в Sublime text editor .
  • Сохраните файл в формате utf-8.

В возвышенном виде щелкните Файл -> Сохранить с кодировкой -> UTF-8

Затем вы можете прочитать свой файл, как обычно:

import pandas as pd
data = pd.read_csv('file_name.csv', encoding='utf-8')

EDIT 1:

Если есть много файлов, вы можете пропустить возвышенный шаг.

Просто прочитайте файл, используя

data = pd.read_csv('file_name.csv', encoding='utf-8')

и другие различные типы кодирования:

encoding = "cp1252"
encoding = "ISO-8859-1"
26
задан chris 17 August 2009 в 23:06
поделиться

6 ответов

Вот пример использования mysqli (объектный синтаксис - довольно легко перевести в функциональный синтаксис, если хотите):

$db = new mysqli("host","user","pw","database");
$stmt = $db->prepare("SELECT * FROM mytable where userid=? AND category=? ORDER BY id DESC");
$stmt->bind_param('ii', intval($_GET['userid']), intval($_GET['category']));
$stmt->execute();

$stmt->store_result();
$stmt->bind_result($column1, $column2, $column3);

while($stmt->fetch())
{
    echo "col1=$column1, col2=$column2, col3=$column3 \n";
}

$stmt->close();

Кроме того, если вам нужен простой способ получить ассоциативные массивы (для использования с помощью SELECT *) вместо того, чтобы точно указывать, к каким переменным привязываться, вот удобная функция:

function stmt_bind_assoc (&$stmt, &$out) {
    $data = mysqli_stmt_result_metadata($stmt);
    $fields = array();
    $out = array();

    $fields[0] = $stmt;
    $count = 1;

    while($field = mysqli_fetch_field($data)) {
        $fields[$count] = &$out[$field->name];
        $count++;
    }
    call_user_func_array(mysqli_stmt_bind_result, $fields);
}

Чтобы использовать ее, просто вызовите ее вместо вызова bind_result:

$stmt->store_result();

$resultrow = array();
stmt_bind_assoc($stmt, $resultrow);

while($stmt->fetch())
{
    print_r($resultrow);
}
47
ответ дан 28 November 2019 в 04:33
поделиться

Если вы собираетесь использовать mysqli - что кажется мне лучшим решением - я настоятельно рекомендую скачать копию класса codesense_mysqli .

Это аккуратный маленький класс, который оборачивает и скрывает большую часть ненужной информации, которая накапливается при использовании необработанного mysqli, так что при использовании подготовленных операторов требуется только одна или две дополнительные строки по сравнению со старым интерфейсом mysql / php

1
ответ дан Cruachan 15 October 2019 в 07:24
поделиться

Подготовленные операторы не поддерживаются простым старым интерфейсом Mysql / PHP. Вам понадобится PDO или mysqli . Но если вы просто хотите заменить заполнители, проверьте этот комментарий на странице руководства php mysql_query.

1
ответ дан 28 November 2019 в 04:33
поделиться

Я согласен с несколькими другими ответами:

  • PHP ext / mysql не поддерживает параметризованные операторы SQL.
  • Параметры запроса считаются более надежными с точки зрения защиты от Проблемы с внедрением SQL.
  • mysql_real_escape_string () также может быть эффективным, если вы используете его правильно, но он более подробный для кода.
  • В некоторых версиях в международных наборах символов есть случаи символов, которые не экранируются должным образом, оставляя тонкие уязвимости. Использование параметров запроса позволяет избежать этих случаев.

Также следует отметить, что вам все равно следует быть осторожным с внедрением SQL, даже если вы используете параметры запроса, потому что параметры в запросах SQL заменяют только буквальные значения. Если вы создаете SQL-запросы динамически и используете переменные PHP для имени таблицы, имени столбца, или любой другой части синтаксиса SQL, ни параметры запроса, ни mysql_real_escape_string () в этом случае не помогут. Например:

$query = "SELECT * FROM $the_table ORDER BY $some_column"; 

Что касается производительности:

  • Повышение производительности достигается, когда вы выполняете подготовленный запрос несколько раз с разными значениями параметров. Вы избегаете накладных расходов на синтаксический анализ и подготовку запроса. Но как часто вам нужно выполнять один и тот же SQL-запрос много раз в одном и том же запросе PHP?
  • Даже когда вы можете воспользоваться этим преимуществом производительности, обычно это лишь небольшое улучшение по сравнению со многими другими вещами, которые вы могли бы сделать для решить проблему производительности, например, эффективно использовать кэширование кода операции или кэширование данных.
  • Бывают даже случаи, когда подготовленный запрос снижает производительность . Например, в следующем случае оптимизатор не может предположить, что он может использовать индекс для поиска,

8
ответ дан 28 November 2019 в 04:33
поделиться

Если модель имеет другие свойства, а затем имя, вам необходимо инициализировать их исходным значением в базе данных, если только они не будут установлены на null.

Вы можете использовать операции обновления HQL ; Сам я никогда не пробовал.

Вы также можете использовать собственный оператор SQL . (" Вот несколько мест, где вы можете получить полезные советы:

На мой взгляд, два наиболее важных элемента:

  • SQL-инъекция: Обязательно экранируйте все переменные вашего запроса с помощью PHP mysql_real_escape_string () функция (или что-то подобное).
  • Проверка ввода: Никогда не доверяйте вводу пользователя. См. this , чтобы узнать, как правильно дезинфицировать и проверять ваши входные данные.
2
ответ дан 28 November 2019 в 04:33
поделиться

Несколько причин: Если у вас есть сложные объединения, иногда лучше иметь представление, чтобы при любом доступе соединения всегда были правильными, а разработчикам не приходилось запоминать все таблицы, которые могут им понадобиться. Обычно это может быть для финансового приложения, где чрезвычайно важно, чтобы все финансовые отчеты основывались на одном и том же наборе данных.

Если у вас есть пользователи, которым вы хотите ограничить записи, которые они могут когда-либо видеть, вы можете использовать представление , предоставьте им доступ только к представлению, а не к базовым таблицам, а затем запросите представление

Похоже, что отчеты Crystal предпочитают использовать представления для сохраненных процессов, поэтому люди, которые много пишут отчеты, как правило, используют много представлений

] Представления также очень полезны при рефакторинге баз данных. Часто вы можете скрыть изменение, чтобы старый код не увидел его, создав представление.

$("#source").appendTo("#destination");

В качестве альтернативы вы можете использовать функцию prependTo (которая добавляет в начало элемента):

$("#source").prependTo("#destination");

Пример:

 $ ("# appendTo"). Click (function () {$ ("#moveMeIntoMain"). appendTo ($ ("# main"));}); $ ("# prependTo"). click (function () {$ ("# moveMeIntoMain"). prependTo ($ ("# main"));}); 
 #main {border: 2px сплошной синий; минимальная высота: 100 пикселей; } .moveMeIntoMain {граница: 1px сплошной красный; } 
  
main < / div>
переместить меня на главную
11
ответ дан 28 November 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: