Простую альтернативу этой проблеме можно решить, предоставив соответствующие разрешения в самой базе данных. Например: если вы используете базу данных mysql, введите в базу данных через терминал или предоставленный интерфейс и просто следуйте этой команде:
GRANT SELECT, INSERT, DELETE ON database TO username@'localhost' IDENTIFIED BY 'password';
Это ограничит пользователя ограничиться только указанным запросом только. Удалите разрешение удаления, и поэтому данные никогда не будут удалены из запроса, запущенного с php-страницы. Второе, что нужно сделать, это очистить привилегии, чтобы mysql обновлял разрешения и обновления.
FLUSH PRIVILEGES;
Дополнительная информация о flush .
To см. текущие привилегии для пользователя, вызывают следующий запрос.
select * from mysql.user where User='username';
Подробнее о GRANT .
Как с большинством вещей необходимо ли выбрать, чтобы использовать на основе контекста и каков концептуально корректный способ пойти. Переключатель действительно говорит "выбор один из них на основе этого значения переменных", но, если оператор является просто рядом булевых проверок.
Как пример, если Вы делали:
int value = // some value
if (value == 1) {
doThis();
} else if (value == 2) {
doThat();
} else {
doTheOther();
}
Это было бы намного лучше представлено как переключатель, поскольку он тогда делает его сразу, очевидно, что выбор действия происходит на основе значения "значения" и не некоторого произвольного теста.
кроме того, если Вы пишете переключатели и если-elses и использовать язык OO, необходимо полагать, что избавление от них и использование полиморфизма достигают того же результата, если это возможно.
Наконец, относительно переключателя, занимающего больше времени для ввода, я не могу помнить, кто сказал это, но я действительно когда-то читал, кто-то просит, чтобы "скорость печати была действительно вещью, которая влияет, как быстро Вы кодируете?" (перефразировал)
Если бы Вы включаете значение единственной переменной тогда, я использовал бы переключатель каждый раз, когда это - то, для чего была сделана конструкция.
Иначе, придерживайтесь нескольких если еще операторы.
Я лично предпочитаю видеть операторы переключения по слишком многим вложенным если-elses, потому что их может быть намного легче считать. Переключатели также лучше в условиях удобочитаемости для показа состояния.
См. также комментарий в этом сообщении относительно pacman ifs.
я обычно предпочитаю, если/еще конструкции по операторам переключения, особенно на языках, который позволяет, проваливаются случаи. То, что я нашел, часто, как возраст проектов, и несколько разработчиков принимают участие, Вы начнете испытывать затруднения из-за конструкции оператора переключения.
, Если они (операторы) становятся чем-то большим чем простой, многие программисты становятся ленивыми и вместо того, чтобы читать весь оператор для понимания его, они просто появятся в случае для покрытия безотносительно случая, который они добавляют в оператор.
я видел много случаев, где код повторяется в операторе переключения, потому что тест человека был уже покрыт, простое падение - хотя случай будет достаточен, но лень вынудила их добавить избыточный код в конце вместо того, чтобы пытаться понять переключатель. Я также видел некоторые кошмарные операторы переключения со многими случаями, которые были плохо созданы, и просто пытающийся следовать за всей логикой, со многими проваливаются случаи, рассеянные повсюду, и много случаев, которые не были, становятся трудными..., который отчасти приводит к первой проблеме / проблеме дублирования, о которой я говорил.
Теоретически, та же проблема могла существовать с тем, если/еще конструкции, но на практике этого просто, кажется, не происходит как часто. Возможно (просто предположение) программисты вынуждены читать немного более тщательно, потому что необходимо понять, часто, более сложные условия, протестированные в если/еще конструкция? Если Вы пишете что-то простое, что Вы знаете, что другие, вероятно, никогда не будут затрагивать, и можно создать его хорошо, то я предполагаю, что это - жеребьевка. В этом случае, независимо от того, что более читаемо и чувствует себя лучшим Вам, вероятно, правильный ответ, потому что Вы, вероятно, будете выдерживать тот код.
Операторы переключения часто работают быстрее, чем если еще конструкции (но не всегда). Так как возможные значения оператора переключения размечаются заранее, компиляторы в состоянии оптимизировать производительность путем построения таблиц переходов. Каждое условие не должно быть протестировано как в, если/еще конструкция (хорошо, пока Вы не находите правильный, так или иначе).
Однако это не всегда имеет место, все же. Если у Вас будет простой переключатель, скажем, с возможными значениями 1 - 10, это будет иметь место. Больше значений, которые Вы добавляете, требует эти , таблицы переходов, чтобы быть больше и переключатель становятся менее эффективными (не, чем если/еще, но менее эффективный, чем сравнительно простой оператор переключения) . Кроме того, если значения очень различны (т.е. вместо 1 - 10, у Вас есть 10 возможных значений, скажем, 1, 1000, 10000, 100000, и так далее к 100000000000), переключатель менее эффективен, чем в более простом случае.
Hope это помогает.
Это зависит очень от конкретного случая. Предпочтительно, я думаю, что нужно использовать switch
по if-else
, если существуют, многие вложили if-elses
.
вопрос состоит в том, сколько многие?
Вчера я спрашивал меня тот же вопрос:
public enum ProgramType {
NEW, OLD
}
if (progType == OLD) {
// ...
} else if (progType == NEW) {
// ...
}
if (progType == OLD) {
// ...
} else {
// ...
}
switch (progType) {
case OLD:
// ...
break;
case NEW:
// ...
break;
default:
break;
}
В этом случае, 1-е if
имеет ненужный второй тест. 2-е чувства немного плохо, потому что это скрывает НОВОЕ.
я закончил тем, что выбор switch
, потому что он просто читает лучше.
Операторы переключения намного легче считать и поддержать, передает. И обычно быстрее и менее подвержены ошибкам.
Используйте переключатель каждый раз, когда Вы имеете больше чем 2 условия на единственной переменной, занимаете рабочие дни, например, если у Вас есть различное действие в течение каждого рабочего дня, необходимо использовать переключатель.
Другие ситуации (несколько переменных или сложных выражений if Вы должны IFS, но нет правила о том, где использовать каждого.
Я часто думал, что использование elseif и отбрасывание через экземпляры случая (где язык разрешает) являются ароматами кода, если не пахнет.
Для меня, я обычно находил, что вложенные (if/then/else) s обычно отражают вещи лучше, чем elseifs, и что для взаимоисключающих случаев (часто, где одна комбинация атрибутов имеет приоритет по другому), случай или что-то подобное более ясно читать два года спустя.
я думаю выбор , оператор, используемый Rexx, является особенно хорошим примером того, как сделать "Случай" хорошо (никакое отбрасывание-throughs) (глупый пример):
Select
When (Vehicle ¬= "Car") Then
Name = "Red Bus"
When (Colour == "Red") Then
Name = "Ferrari"
Otherwise
Name = "Plain old other car"
End
, О, и если оптимизация не до него, получают новый компилятор или язык...
Тенденция избежать материала, потому что занимает больше времени ввести, является плохой вещью, попытайтесь выкорчевать его. Однако чрезмерно подробные вещи также трудно считать, настолько маленький и простой важно, но это - удобочитаемость не writability, это важно. Краткие остроты может часто быть более трудно считать, чем простое хорошо разметило 3 или 4 строки.
Использование, какой бы ни создают лучший descibes логика операции.
Скажем, Вы решили использовать переключатель, поскольку Вы только работаете над единственной переменной, которая может иметь различные значения. Если бы это привело бы к небольшому оператору переключения (2-3 случая), я сказал бы, что это прекрасно. Если бы кажется, что Вы закончите с больше, я рекомендовал бы использовать полиморфизм вместо этого. Шаблон AbstractFactory мог использоваться здесь для создания объекта, который выполнит любое действие, которое Вы пытались сделать в переключателях. Ужасный оператор переключения будет абстрагирован далеко, и Вы заканчиваете с более чистым кодом.