После перезагрузки он теперь работает.
Итак, трюк состоял в том, чтобы вручную выполнить create_tables.sql, вы можете просто скопировать все в sql-окно phpMyAdmin и выполнить его. Это создало недостающие таблицы.
из книги rhino:
В JavaScript строки являются неизменяемыми объектами, а это значит, что символы внутри них не могут быть изменены и что любые операции над строками фактически создают новые строки. Строки назначаются по ссылке, а не по значению. В общем случае, когда объект присваивается ссылкой, изменение, сделанное объектом через одну ссылку, будет видимым через все другие ссылки на объект. Однако, поскольку строки не могут быть изменены, вы можете иметь несколько ссылок на строковый объект и не волноваться, что значение строки изменится, не зная егоЧто касается вашего вопроса (в вашем комментарии к реакции Эша) о StringBuilder в ASP.NET Ajax, эксперты, похоже, не согласны с этим.
Кристиан Венц говорит в своей книге «Программирование ASP.NET AJAX ( O'Reilly), что «этот подход не оказывает какого-либо измеримого влияния на память (фактически, реализация кажется тика медленнее стандартного подхода)».
С другой стороны, Галло и другие говорят в своей книге . Программирование ASP.NET AJAX (Manning): «Когда число строк для конкатенации больше, построитель строк становится важным объектом, чтобы избежать огромного снижения производительности».
] Я думаю, вам нужно будет сделать свой собственный бенчмаркинг, и результаты могут отличаться и между браузерами. Однако, даже если он не улучшает производительность, он все равно может считаться «полезным» для программистов, которые используются для кодирования с помощью StringBuilders на таких языках, как C # или Java.
Совет по производительности:
Если вам нужно объединить большие строки, поместите части строки в массив и используйте метод Array.Join(), чтобы получить общую строку. Это может быть во много раз быстрее для конкатенации большого количества строк.
В JavaScript нет StringBuilder.
Строки неизменяемы - они не могут измениться, мы можем только создавать новые строки.
Пример:
var str= "Immutable value"; // it is immutable
var other= statement.slice(2, 10); // new string
Строки JavaScript действительно неизменяемы.
Это поздняя публикация, но я не нашел хорошую цитату из книги.
Вот определенная, за исключением надежной книги:
Строки неизменяемы в ECMAScript , что означает, что после их создания их значения не могут измениться. Чтобы изменить строку, содержащуюся в переменной, исходная строка должна быть уничтожена, а переменная заполнена другой строкой, содержащей новое значение ... - Профессиональный JavaScript для веб-разработчиков, 3-е изд., Стр.43Теперь ответ, который цитирует выдержку из книги Rhino, справедлив в отношении неизменности строки, но неправильно говорит: «Строки назначаются по ссылке, а не по значению». (возможно, они изначально предполагали, что слова будут противоположными).
Заблуждение «ссылка / значение» поясняется в разделе «Профессиональный JavaScript», озаглавленном «Примитивные и опорные значения»:
Строки неизменны в ECMAScript, а это означает, что после их создания их значения не могут измениться. Чтобы изменить строку, содержащуюся в переменной, исходная строка должна быть уничтожена, а переменная заполнена другой строкой, содержащей новое значение ... - Профессиональный JavaScript для веб-разработчиков, 3-е изд., Стр.43
Пять примитивных типов ... [are]: Undefined, Null, Boolean, Number и String. Говорят, что эти переменные имеют доступ к значению, поскольку вы управляете фактическим значением, хранящимся в переменной. -Professional JavaScript для веб-разработчиков, 3-е изд., С.85
Когда вы манипулируете объектом, вы действительно работаете над ссылкой на этот объект, а не с самим объектом. По этой причине такие значения, как говорят, доступны по ссылке. [D4] -Профессиональный JavaScript для веб-разработчиков, 3-е изд., Стр.43Значение типа строки является неизменным, но объект String, созданный с помощью конструктора String (), является изменяемым, потому что это объект, и вы можете добавить к нему новые свойства.
> var str = new String("test")
undefined
> str
[String: 'test']
> str.newProp = "some value"
'some value'
> str
{ [String: 'test'] newProp: 'some value' }
Тем не менее, хотя вы можете добавлять новые свойства, вы не можете изменить уже существующие свойства
Снимок экрана теста в консоли Chrome
В заключение, 1. вся строка значение типа (примитивный тип) является неизменным. 2. Объект String является изменяемым, но значение типа строки (примитивный тип), которое оно содержит, является неизменным.