Elettracompany.com

Компьютерный справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Php ms sql

Microsoft SQL Server

User Contributed Notes 16 notes

Hi, i was need some short and simple script to list all tables and columns of MSSQL database. There was nothing easy to explain on the net, so i’ve decided to share my short script, i hope it will help.

» . $table_name . » (» . $id . «)

I made this wrapper a few years ago to handle mssql -> sqlsrv_pdo migrations. It’s a drop-in include that provides the mssql_ functions using a sqlsrv_pdo implementation.

Here is version 3.0 of the MSSQL PHP driver.
1.1 is severely deprecated.

I really don’t know why these functions are not deprecated yet. There isn’t even a built-in way to escape your values, let alone use parameterized queries.

On Windows servers, you should use SqlSrv (http://php.net/sqlsrv), an alternative driver for MS SQL is available from Microsoft: » http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx.

On Linux servers, you should use PDO_DBLIB (http://php.net/pdo-dblib).

I got a serious problem with Unicode data when working with PHP and MSSQL. I have to say the PHP and MSSQL doesn’t seem to be a good combination.

MSSQL is really complicated to work with since the whole server uses a single character encoding[ucs-2]. In order to store unicode information, the column data types must be specified as one of the national character types, NVARCHAR, NCHAR or NTEXT.

In order to retrieve data saved in unicode format, M$ suggest users to cast columns to binary data.Unfortunately php_mssql extension doesn’t support binary data to be returned in string columns.

My advice is to use FreeTDS driver [it’s just an php extension]. This driver seems to handle unicode data better. I can put and receive unicode with casting or change encoding.

A good tutorial «Using freeTDS» can be found here

However, freeTDS is not a perfect solution for unicode data. I’m not able to execute stored procedures with mssql_bind, mssql_bind without having my text changed.

Microsoft has issued in nearly past Native SQL driver for PHP.
This driver works with MSSQL 2000, 2005 and 2008 servers. Driver is issued as PHP extension. Source codes also available.

The driver supports native conversion to UTF-8, scrollable cursors and other features which this (old) library does not.

For more information and extension download please see
http://www.codeplex.com/SQLSRVPHP
They have also blog on http://blogs.msdn.com/sqlphp/

As of October 2009, the new name is «SQL Server Driver for PHP 1.1»

Go to Microsoft Download Center http://www.microsoft.com/downloads and search
for «SQL Server Driver for PHP» which should take you to the following link:

But I wouldn’t trust it to stay there. Microsoft has been moving a lot of download links lately.

After extensive research trying to get PHP on Linux communicating with SQL Server 2005 and 2008 including support for all Unicode, MAX and XML data types I could not find any open source solutions. yes, I spent a lot of time trying to get FreeTDS to work to no avail.

I found one free solution that runs on Windows which is to use the «SQL Server Driver for PHP» provided by Microsoft (http://sql2k5php.codeplex.com). The driver relies on the Microsoft Native Client ODBC drivers for SQL Server 2008 (part of the «Microsoft SQL Server 2008 Native Client» which is downloadable from Microsoft) which is why this solution will not work on anything except Windows.

I did find a solution that works for PHP on Linux but it’s not free. use the standard PHP::ODBC lib (free) and the Easysoft ODBC driver for SQL Server (not free, but reasonable by Enterprise standards). You can check out the ODBC driver by going here http://www.easysoft.com/products/data_access and looking for «Easysoft ODBC-SQL Server Driver»

this function get inserted ident like function mysql_insert_id()

On windows, do not use this for mssql 2005 of later. The methods of access are deprecated.

Use the Microsoft SQL Server 2005 Driver for PHP instead.
Current link is.
http://www.microsoft.com/sqlserver/2005/en/us/PHP-Driver.aspx

I spent many days trying to bind PHP with Linux and SQL Server but failed. I saw that the last update about that issue was 7 years ago.

I want to update that theme for everyone who is in searches for the reliable solution. I didn’t find a free and simple way to do that.

I tried a trial version of SQL Server ODBC driver from Devart company and it turned out to be compatible with PHP and has a version for Linux. The driver has a simple configuration and works with PHP on Linux. But it’s big minus that it is not free.

Im running PHP 5.3 and used the php development ini and when I use the Microsoft SQL for PHP driver, I get the following error:

[15-Aug-2009 07:48:13] PHP Warning: PHP Startup: sqlsrv: Unable to initialize module
Module compiled with module API=20060613
PHP compiled with module API=20090626
These options need to match
in Unknown on line 0

Как подключиться к Microsoft SQL Server через PHP

В этой статье мы расскажем о всех тонкостях подключения к MS SQL серверу, для работы с ним через PHP .

Мы будем рассматривать SQL Server 2014 . На ранних версиях этот процесс может немного отличаться.

Давайте определим, что мы уже имеет установленный пакет SQL Server на каком то VPS или сервере с ОС Windows (Например, заказанного у ihc.ru), либо установленный на вашем локальном компьютере для тестов.

Так же соответственно на сервере стоит PHP версии 5.2+ или у вас установлен локальный сервер, вроде OpenServer .

Теперь нужно скачать и установить PHP driver для SQL Server — вот ссылка на официальный сайт.

На данный момент там есть четыре версии драйвера 2.0, 3.0, 3.1, 3.2. Далее приведена таблица с совместимостью с PHP :

Так же приведем таблицу поддержки разных версий MS SQL Server :

Windows Server 2008 R2 SP1

Windows Server 2008 SP2

Windows Server 2012

Windows Server 2012 R2

Windows Server 2008 R2 SP1

Windows Server 2008 SP2

Windows Server 2003 Service Pack 1

Windows Server 2008 R2

Windows Server 2008

Мы для проверки выбрали драйвер версии 3.2 для сервера 2014 года. После скачивания распакуйте полученные файлы в какую-нибудь временную папку. Получите примерно такой список файлов:

  • PHP Drivers License Terms.rtf
  • php_pdo_sqlsrv_54_nts.dll
  • php_pdo_sqlsrv_54_ts.dll
  • php_pdo_sqlsrv_55_nts.dll
  • php_pdo_sqlsrv_55_ts.dll
  • php_pdo_sqlsrv_56_nts.dll
  • php_pdo_sqlsrv_56_ts.dll
  • php_sqlsrv_54_nts.dll
  • php_sqlsrv_54_ts.dll
  • php_sqlsrv_55_nts.dll
  • php_sqlsrv_55_ts.dll
  • php_sqlsrv_56_nts.dll
  • php_sqlsrv_56_ts.dll
  • release.txt
  • SQLSRV_Readme.htm
  • SQLSRV_ThirdPartyNotices.rtf

Нас здесь интересуют только библиотеки с форматом dll . Библиотеки с приставкой php_pdo отметаем сразу. Остается список из файлов:

  • php_sqlsrv_54_nts.dll
  • php_sqlsrv_54_ts.dll
  • php_sqlsrv_55_nts.dll
  • php_sqlsrv_55_ts.dll
  • php_sqlsrv_56_nts.dll
  • php_sqlsrv_ 56_ts.dll

Здесь после приставки php_sqlsrv_ идут две цифры, это версия PHP , и следующие символы определяют Thread Safety , режим которого можно посмотреть в информации о вашем PHP , смотрится в phpinfo() . Если в графе стоит enabled , то выбираем версию с приставкой _ts и иначе — _nts .

После того как вы определились с файлом драйвера, который нужен вам, переходим к настройке php.ini . В первую очередь находим там строчку extension_dir = и удостоверяемся, что она не закомментирована, она указывает путь к расширениям, именно по этому пути открываем соответствующую директорию и закидываем туда библиотеку драйвера, в нашем случае это был php_sqlsrv_54_ts.dll , у вас может быть другая версия драйвера.

Теперь добавляем в php.ini строку с подключением драйвера extension=php_sqlsrv_54_ts.dll . Перезапускаем сервер и проверяем phpinfo() . Если всё произошло успешно вы должны обнаружить блок sqlsrv :

Теперь проверяем соединение с БД при помощи следующего шаблона:

Если получаем «Connection established.» — радуемся. Если «Connection could not be established.» и гору сообщений об ошибках, то перечитываем статью, после этого уже пишем в комментарии.

Мы пробовали всё на локальном компьютере — сервер OpenServer , версия PHP — 5.4.44, MS SQL Server 2014, имя БД — StudyBD .

Напоследок так же ссылка на на описание API драйвера.

Mssql Функции

Содержание

  • mssql_bind — Добавляет параметр хранимой процедуре или удаленной хранимой процедуре
  • mssql_close — Закрывает соединение с MS SQL Server
  • mssql_connect — Открывает соединение с MS SQL server
  • mssql_data_seek — Перемещает внутренний указатель на строку
  • mssql_execute — Запускает хранимую процедуру на сервере MS SQL
  • mssql_fetch_array — Fetch a result row as an associative array, a numeric array, or both
  • mssql_fetch_assoc — Returns an associative array of the current row in the result
  • mssql_fetch_batch — Returns the next batch of records
  • mssql_fetch_field — Возвращает информацию о столбце
  • mssql_fetch_object — Fetch row as object
  • mssql_fetch_row — Get row as enumerated array
  • mssql_field_length — Получить длину поля
  • mssql_field_name — Получить имя поля
  • mssql_field_seek — Перемещение к указанному полю
  • mssql_field_type — Возвращает тип поля
  • mssql_free_result — Освобоздает память, занятую результирующим набором
  • mssql_free_statement — Освобождает память, занятую оператором
  • mssql_get_last_message — Возвращает последнее сообщение от сервера
  • mssql_guid_string — Преобразует 16-байтовый бинарный GUID в строку
  • mssql_init — Инициализирует хранимую процедуру или удаленную хранимую процедуру
  • mssql_min_error_severity — Устанавливает минимальную серьезность ошибок
  • mssql_min_message_severity — Устанавливает минимальную серьезность сообщений
  • mssql_next_result — Move the internal result pointer to the next result
  • mssql_num_fields — Возвращает количество столбцов в результирующем наборе
  • mssql_num_rows — Возвращает количество строк в результате
  • mssql_pconnect — Открывает постоянное соединение с MS SQL
  • mssql_query — Send MS SQL query
  • mssql_result — Get result data
  • mssql_rows_affected — Возвращает количество строк, затронутых последним запросом
  • mssql_select_db — Select MS SQL database
Читать еще:  Телефон выдает ошибку гугл плей

User Contributed Notes 33 notes

MSSQL doesn’t have a real_escape_string function like MYSQL does, which can lead to error when inserting or updating data that contains a ‘ (single quote).

To prevent this, replace all ‘ (single quotes) by TWO ‘ (single quotes) » which SQL server will interpret as an escaped ‘.
Also you may want to remove any ‘ » escape sequences that are translated from any FORM output into the PHP $_POST variables.

Hope this helps someone.
James

PHP and SQL Server

Install And Configure FreeTDS
The first thing you need to do is to download and install the FreeTDS driver. You can get the source and compile it yourself from http://www.freetds.org/, but I prefer RPMs. Depending on your distrobution of Linux, the version you want will vary. I’m running Red Hat Enterprise Linux 4 ES and CentOS 4, which are both almost identical. I installed freetds-0.62.3-1 from http://rpmforge.net/user/packages/freetds/
After installing FreeTDS, you can check your driver by attempting to connect to the MSSQL Server. Of course, use the appropriate server name, username and password in your command line.
# /usr/bin/tsql -S [mssql.servername.or.ip] -U [ValidUser]
locale is «en-US.UTF-8»
locale charset is «UTF-8»
Password: [password]
1>
Enter «quit» to exit your successful connection. If the tsql command doesn’t return the 1> prompt, verify that you can get to your MSSQL server with telnet [mssql.servername.or.ip] 1433 and that your username and password are valid.
Next, edit your /etc/freetds.conf configuration file and add the following at the end of the file:
[TDS]
host = [mssql.servername.or.ip]
port = 1433
tds version = 7.0
Setup ODBC Data Source
Next, unixODBC needs to know about all ODBC drivers you intend to use. While you can use the GUI program that comes with unixODBC, you can also use the odbcinst command. First create a template file containing your FreeTDS setup information.
tdsdriver.template
[FreeTDS]
Description = v.062 with protocol v7.0
Driver = /usr/lib/libtdsodbc.so.0
Run odbcinst, telling it to install a driver entry using the template we just created.
# odbcinst -i -d -f tdsdriver.template
odbcinst: Driver installed. Usage count increased to 1.
Target directory is /etc
This will add an entry to the end of the file /etc/odbcinst.ini
[FreeTDS]
Description = v0.62 with protocol v7.0
Driver = /usr/lib/libtdsodbc.so.0
UsageCount = 1

My problem was that I’ve loaded the ntwdblib.dll (8.00.194) into the php directory, but it also have to be placed in the bin directory of Apache.

I hope this will save you some time searching for the solution, if you encounter the same problem.

I’m using SQL 2005 Express Edition on Windows Vista Enterprise with Apache.

Running on the following settings I couldn’t connect to my local SQL server.

— Apache 2.2.6
— PHP 5.2.5
— SQL Server 2005
— Windows XP SP2

The problem lies within the wrong dynamic library that is included in Apache and PHP. To fix this problem follow this steps:

1. Download the good version of ntwdblib.dll (2000.80.194.0) http://webzila.com/dll/1/ntwdblib.zip
2. Overwrite C:wampbinapacheapache2.2.6binntwdblib.dll
3. Overwrite C:wampbinphpphp5.2.5ntwdblib.dll

4. Start the SQL Server Configuration Manager -> Protocols
5. Enable «named pipes» and «tcp/ip»
6. Right-click «tcp/ip» -> Properties tab «IP addresses»
7. Fill in «TCP Dynamic Ports» with 1433

8. Restart SQL Server AND Apache, PHP and all the other services

Try the following mssql_connect:

mssql_connect(‘localhost,1433’, USERNAME, PASSWORD);

I worked on a project with a MS SQL server 2008 containing data of NVARCHAR type in multiple languages,
including asian characters. It is a known issue, that the PHP MSSQL functions are not able to retrieve
unicode data form NVARCHAR or NTEXT data fields.

I spent some time searching for possible solutions and finaly found a work arround, that provides correct
display of latin and asian fonts from a NVARCHAR field.

Do a SQL query, while you convert the NVARCHAR data first to VARBINARY and then to VARCHAR

SELECT
CONVERT(VARCHAR(MAX),CONVERT(VARBINARY(MAX),nvarchar_col)) AS x
FROM dbo.table

While you fetch the result set in PHP, use the iconv() function to convert the data to unicode

Now you can ouput the text to UTF-8 encoded page with the correct characters.

This workarround did run on IIS 6.0 with PHP 5.2.6 running as FastCGI.

Here is the changes required to connect MSSQL database using mssql_connect with long password (more than 30 chars)

Steps to follow:

1) cd /usr/local/src/freetds-0.91/

2) Change the values as required in freetds src:

# Default values:
# Filename: include/sybdb.h (line 67)
#define DBMAXNAME 30

# Filename: include/tds.h (line 760)
#define TDS_MAX_DYNID_LEN 30

# Filename: include/tds.h (line 831)
#define TDS_MAX_LOGIN_STR_SZ 30

3) Modify the TDS_MAX_LOGIN_STR_SZ macro to overcome the password limitation of 30 chars

4) Recompile the freetds

make clean && ./configure —prefix=/usr/local/freetds —with-tdsver=8.0 —enable-msdblib —enable-dbmfix —with-gnu-ld && make && make install

5) Restart the apache
/usr/local/apache2/bin/apachectl stop && /usr/local/apache2/bin/apachectl start

6) Export the FREETDS
export FREETDSCONF=/etc/freetds.conf

Test the MSSQLdatabase connection using CLI

> php -a
Interactive mode enabled

resource(1) of type (mssql link)

It appears ntwdblib.dll is no longer a part of SQL 2005. According to Microsoft the component is deprecated and they recommend using OLE DB or ODBC. The dll from SQL Server version 6.5, SQL Server 7.0, or SQL Server 2000 still works against 2005 if you have it.

From Microsoft’s site:

Although the SQL Server 2005 Database Engine still supports connections from existing applications using the DB-Library and Embedded SQL APIs, it does not include the files or documentation needed to do programming work on applications that use these APIs. A future version of the SQL Server Database Engine will drop support for connections from DB-Library or Embedded SQL applications. Do not use DB-Library or Embedded SQL to develop new applications. Remove any dependencies on either DB-Library or Embedded SQL when modifying existing applications. Instead of these APIs, use the SQLClient namespace or an API such as OLE DB or ODBC. SQL Server 2005 does not include the DB-Library DLL required to run these applications. To run DB-Library or Embedded SQL applications you must have available the DB-Library DLL from SQL Server version 6.5, SQL Server 7.0, or SQL Server 2000.

Another helpful hint in regards to SQL Server 2005 Express:

Make sure your SQL Server is set to «SQL Server and Windows Authentication mode». By default it is NOT.

1) Open «SQL Server Management Studio Express»
2) Right-click server («machinenamesqlexpress») and select «Properties».
3) Select «Security»
4) Select «SQL Server and Windows Authentication mode»
5) Restart SQL Server.

I’m running apache 1.3.26 and php 4.3.6 on a linux server (debian), and connecting to SQL Server 2000 via php4-mssql and Freetds.

I managed to get a connection to the SQL server, but found that when I used the function mssql_query() to pass in a Select statement containing datetime columns, I would get the following message in Internet Explorer — «The page cannot be displayed». When I removed the datetime column from the query, it worked fine, and returned a resultset.
Looked in the apache error.log file, and found the error «child pid xxxxxx exit signal segmentation fault».

After a lot of searching on the internet I stumbled upon an entry which was missing from my php.ini. I added the line «mssql.datetimeconvert = Off» to the MSSQL section of pphp.ini, restarted Apache, and the problem went away. Now I can select dates in SQL queries

If you get an error like:

PHP Warning: mssql_query(): message: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. (severity 16) in /var/www/html/query.php on line 29

There are two solutions: one solution involves casting the data types in the query, the other solution involves changing the version number free tds is using.

The first solution is mentioned all over the web and limits what you can return, the second solution will probably only be found right here.

Open up your free tds configuration file (/etc/freetds.conf), and change:

[global]
tds version = 4.2

[global]
tds version = 8.0

You don’t have to upgrade any packages, but by default, freetds tries to use an older version (if you installed freetds using yum or apt-get).

There is a PHP driver for SQL Server 2005+ from Microsoft. You can even download the source code.

Search for «SQL Server 2005 Driver for PHP» on MSDN, or try one of these links:

Windows 2000 Advanced Server
iis
PHP 5.2.5
SQL server Express

Could not connect using the following connect string:

$sqlconn = mssql_connect «localhost,1433», «user», «password»)

After 2 days of frustration and reinstalling PHP + SQLEXPRESS and trying EVERYTHING I could find via Google, I found a setting in PHP.INI that I never noticed.

ENABLE _dl = ON ———- I changed this to OFF

Problem went away and all is working as it used to on PHP4

Hope this helps others with the same problem

I was able to install and configure Freetds on CENTOS 4 following the guide lines mentioned in beliw mentioned URL

Читать еще:  Fallout 3 ошибка 0xc000007b

I advice everybody to follow the same

Microsoft SQL Server 2005 and Vista.

The following steps enabled MSSQL 2005 support on Vista Home Permium. (native drivers, not odbc which works out-of-the-box)

1) Place ntwdblib.dll in C:WindowsSystem32
2) Place php_mssql.dll in C:WindowsSystem32
(I gave IUSR full access to these files, maybe read is enough)

3) uncomment php_mssql.dll in php.ini

4) Changed my default SQLSERVER 2005 install so it accepts named piped. (Do this via start-> SQLServer2005->configuration tools->SQL SERVER surface area configuration.

After that I could use the mssql_* functions.

Hope that helps.

It can be download free of charge. Binaries are provided for Windows platform only.

Работа с базами данных SQL в PHP для новичков

Учебник PHP

Практика

Важное

Регулярки

Работа с htaccess

Файлы, папки

Сессии и куки

Работа с БД

Практика по работе с БД в PHP

Перед чтением см. новые уроки раздела «Важное», которые появились выше.

Практика

Движок PHP

Продвинутые БД

Аутентификация

Практика

ООП и MVC

Что такое база данных

База данных (сокращенно БД) — это место, в котором хранятся данные сайта.

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

База данных состоит из таблиц. Что такое таблица вы знаете из жизни: это строки и столбцы. А на пересечении строк и столбцов располагаются ячейки.

В базах данных столбцы часто называют полями.

Это легко можно вообразить себе, представив документ Excel. Базой данных будет являться сам документ (книга), а таблицами — каждый лист этой книги.

PhpMyAdmin

Для редактирования баз данных часто пользуются программой PhpMyAdmin.

PhpMyAdmin (читается PHPмайадмин, часто пишут аббревиатуру PMA или ПМА) — это оболочка для работы с базами данных прямо у вас в браузере.

Вы можете править содержимое таблиц, создавать новые базы данных и таблицы — и все это через веб-интерфейс, не зная SQL.

Видео на PhpMyAdmin

Задачи на PhpMyAdmin

Давайте откроем PhpMyAdmin и приступим к изучению его интерфейса.

Чтобы вам было проще с ним освоится, сделайте следующие практические задачи:

  1. Создайте базу данных test.
  2. В ней создайте таблицу users.
  3. В этой таблице сделайте 4 поля (столбца):
    • id (для него нужно поставить галочку AUTO_INCREMENT или A.I.), тип integer,
    • name, тип varchar, 32 символа,
    • age, тип integer,
    • birthday (англ. день рождения), тип date.
  4. Найдите вкладку ‘вставить’ и с ее помощью вставьте несколько строк в эту таблицу При этом поле id заполнять не нужно! Оно заполнится автоматически!
  5. Поредактируйте какую-нибудь запись.
  6. Удалите какую-нибудь запись.
  7. Поменяйте кодировку для таблицы и для всей базы данных (на utf8_general_ci).
  8. Переименуйте таблицу.
  9. Переименуйте базу данных.

AUTO_INCREMENT

Обратите внимание на то, что мы создали поле id и поставили ему галочку AUTO_INCREMENT. Это очень важный шаг!

Теперь при вставке новой записи (строки) в таблицу это поле будет заполняться автоматически уникальным номером.

При этом если мы удалим строку с каким-то id (например 1), то такого id больше никогда не будет.

Зачем нужно поле id?

Затем, чтобы мы всегда могли обратиться к конкретной строке по ее id, например с целью удаления или редактирования.

Типы переменных

В SQL довольно много типов переменных, но чаще всего приходится пользоваться следующими:

  • integer – целочисленный.
  • text – большое текстовое поле.
  • varchar – не очень большое текстовое поле, при этом мы должны задать его размер (он должен быть степенью двойки: 8, 16, 32, 64, 128, 256 и т.д.).
  • date — поле для хранения даты (дата хранится в SQL-формате: год-месяц-день, пример: 2013-06-24).

Как работать с mySQL через PHP

Работа с БД из PHP осуществляется всего лишь с помощью трех функций:

  • mysqli_connect – соединение с сервером и базой данных.
  • mysqli_query — универсальная функция отправки запросов к БД, с помощью нее можно сделать все.
  • mysqli_error — вывод ошибок.

Далее подробнее про каждую из функций.

Устанавливаем соединение с БД

Данный материал есть также в виде видео: https://youtu.be/J8GFuyA_k_8

Прежде, чем начать работать с базой данных из PHP, нужно установить соединение с сервером, на котором эта база находится.

Делается это с помощью функции PHP mysql_connect, которая принимает 3 параметра: имя хоста (сервера), имя пользователя, под которым мы работаем с базой и пароль для этого пользователя.

Если вы работаете на своем компьютере то это будут ‘localhost’, ‘root’ и пароль в виде пустой строки (на некоторых серверах он тоже может быть root). Если ваша база данных в интернете — то эти данные дает вам хостер.

Давайте установим соединение с базой данных:

Посылаем запросы к базе данных

Запросы к базе данных представляют собой обычные строки, которые мы вставляем в функцию PHP mysqli_query (первым параметром это функция принимает переменную, в которую мы записали результат mysqli_connect, в нашем случае это переменная $link):

Принято правило, по которому команды SQL следует писать в верхнем регистре (то есть большими буквами), а все остальное — в нижнем.

Это относиться к командам SELECT, UPDATE, FROM, DELETE, WHERE и другим такого рода.

Конечно, синтаксической ошибки не будет, если вы напишите их маленькими буквами, но принято большими.

Отлавливаем ошибки базы данных

Многие начинающие зачастую не умеют отлавливать ошибки, которые вернула база данных.

Поэтому при работе с БД у них постоянно возникают сложности. Что-то не работает, а что — не понятно, так как ошибок они не видят, так как PHP не выводит ошибки mySQL, если ему об этом не сказать

Чтобы вывести ошибки, следует пользоваться конструкцией or die ( mysqli_error($link) ), которую необходимо добавлять к каждому запросу к БД.

Смотрите пример: mysqli_query($link, $query) or die( mysqli_error($link) );

Таким образом вы сразу будете получать сообщения об ошибках синтаксиса SQL. Обратите внимание на то, что на рабочем сайте эти конструкции следует удалять, чтобы пользователи и тем более хакеры не видели ошибок БД.

Проблемы с кодировками

Зачастую у новичков возникает проблема с кодировками — казалось бы нормальный русский текст в базу данных записывается абракадаброй или вопросиками.

Чтобы не было проблем с кодировками следует придерживаться простых правил:

  • Базу данных следует создавать в кодировке utf8_general_ci.
  • Документ PHP должен быть в кодировке utf8.
  • Таблицы в БД должны быть в utf8_general_ci.
  • На всякий случай сразу после команды mysqli_connect добавьте такое запрос: mysqli_query($link, «SET NAMES ‘utf8′»);

Начнем практиковаться

Сейчас мы с вами начнем изучить SQL запросы на практике. Для этого нам понадобится тестовая таблица в базе данных, заполненная некоторыми данными. Сейчас мы с вами ее сделаем и заполним.

Итак, создайте свою первую базу данных с помощью PhpMyAdmin.

Назовите ее «test».

Создайте в этой базе новую таблицу.

Назовите ее «workers» (англ. работники).

В ней создайте 4 столбца (столбцы по другому называются поля):

  • id – тип integer, не забудьте поставить ему галочку AUTO_INCREMENT (чтобы в этом столбце номера проставлялись автоматически).
  • name (англ. имя) – тип varchar, размером в 256 знаков.
  • age (англ. возраст) — тип integer.
  • salary (англ. зарплата) — тип integer.

Ее заполните тестовыми данными, как показано в таблице ниже (этот шаг обязателен, так как дальше все задачи будут по этой таблице):

Mssql Функции

Содержание

  • mssql_bind — Добавляет параметр хранимой процедуре или удаленной хранимой процедуре
  • mssql_close — Закрывает соединение с MS SQL Server
  • mssql_connect — Открывает соединение с MS SQL server
  • mssql_data_seek — Перемещает внутренний указатель на строку
  • mssql_execute — Запускает хранимую процедуру на сервере MS SQL
  • mssql_fetch_array — Fetch a result row as an associative array, a numeric array, or both
  • mssql_fetch_assoc — Returns an associative array of the current row in the result
  • mssql_fetch_batch — Returns the next batch of records
  • mssql_fetch_field — Возвращает информацию о столбце
  • mssql_fetch_object — Fetch row as object
  • mssql_fetch_row — Get row as enumerated array
  • mssql_field_length — Получить длину поля
  • mssql_field_name — Получить имя поля
  • mssql_field_seek — Перемещение к указанному полю
  • mssql_field_type — Возвращает тип поля
  • mssql_free_result — Освобоздает память, занятую результирующим набором
  • mssql_free_statement — Освобождает память, занятую оператором
  • mssql_get_last_message — Возвращает последнее сообщение от сервера
  • mssql_guid_string — Преобразует 16-байтовый бинарный GUID в строку
  • mssql_init — Инициализирует хранимую процедуру или удаленную хранимую процедуру
  • mssql_min_error_severity — Устанавливает минимальную серьезность ошибок
  • mssql_min_message_severity — Устанавливает минимальную серьезность сообщений
  • mssql_next_result — Move the internal result pointer to the next result
  • mssql_num_fields — Возвращает количество столбцов в результирующем наборе
  • mssql_num_rows — Возвращает количество строк в результате
  • mssql_pconnect — Открывает постоянное соединение с MS SQL
  • mssql_query — Send MS SQL query
  • mssql_result — Get result data
  • mssql_rows_affected — Возвращает количество строк, затронутых последним запросом
  • mssql_select_db — Select MS SQL database

User Contributed Notes 33 notes

MSSQL doesn’t have a real_escape_string function like MYSQL does, which can lead to error when inserting or updating data that contains a ‘ (single quote).

To prevent this, replace all ‘ (single quotes) by TWO ‘ (single quotes) » which SQL server will interpret as an escaped ‘.
Also you may want to remove any ‘ » escape sequences that are translated from any FORM output into the PHP $_POST variables.

Hope this helps someone.
James

PHP and SQL Server

Install And Configure FreeTDS
The first thing you need to do is to download and install the FreeTDS driver. You can get the source and compile it yourself from http://www.freetds.org/, but I prefer RPMs. Depending on your distrobution of Linux, the version you want will vary. I’m running Red Hat Enterprise Linux 4 ES and CentOS 4, which are both almost identical. I installed freetds-0.62.3-1 from http://rpmforge.net/user/packages/freetds/
After installing FreeTDS, you can check your driver by attempting to connect to the MSSQL Server. Of course, use the appropriate server name, username and password in your command line.
# /usr/bin/tsql -S [mssql.servername.or.ip] -U [ValidUser]
locale is «en-US.UTF-8»
locale charset is «UTF-8»
Password: [password]
1>
Enter «quit» to exit your successful connection. If the tsql command doesn’t return the 1> prompt, verify that you can get to your MSSQL server with telnet [mssql.servername.or.ip] 1433 and that your username and password are valid.
Next, edit your /etc/freetds.conf configuration file and add the following at the end of the file:
[TDS]
host = [mssql.servername.or.ip]
port = 1433
tds version = 7.0
Setup ODBC Data Source
Next, unixODBC needs to know about all ODBC drivers you intend to use. While you can use the GUI program that comes with unixODBC, you can also use the odbcinst command. First create a template file containing your FreeTDS setup information.
tdsdriver.template
[FreeTDS]
Description = v.062 with protocol v7.0
Driver = /usr/lib/libtdsodbc.so.0
Run odbcinst, telling it to install a driver entry using the template we just created.
# odbcinst -i -d -f tdsdriver.template
odbcinst: Driver installed. Usage count increased to 1.
Target directory is /etc
This will add an entry to the end of the file /etc/odbcinst.ini
[FreeTDS]
Description = v0.62 with protocol v7.0
Driver = /usr/lib/libtdsodbc.so.0
UsageCount = 1

Читать еще:  После заправки принтера ошибка печати

My problem was that I’ve loaded the ntwdblib.dll (8.00.194) into the php directory, but it also have to be placed in the bin directory of Apache.

I hope this will save you some time searching for the solution, if you encounter the same problem.

I’m using SQL 2005 Express Edition on Windows Vista Enterprise with Apache.

Running on the following settings I couldn’t connect to my local SQL server.

— Apache 2.2.6
— PHP 5.2.5
— SQL Server 2005
— Windows XP SP2

The problem lies within the wrong dynamic library that is included in Apache and PHP. To fix this problem follow this steps:

1. Download the good version of ntwdblib.dll (2000.80.194.0) http://webzila.com/dll/1/ntwdblib.zip
2. Overwrite C:wampbinapacheapache2.2.6binntwdblib.dll
3. Overwrite C:wampbinphpphp5.2.5ntwdblib.dll

4. Start the SQL Server Configuration Manager -> Protocols
5. Enable «named pipes» and «tcp/ip»
6. Right-click «tcp/ip» -> Properties tab «IP addresses»
7. Fill in «TCP Dynamic Ports» with 1433

8. Restart SQL Server AND Apache, PHP and all the other services

Try the following mssql_connect:

mssql_connect(‘localhost,1433’, USERNAME, PASSWORD);

I worked on a project with a MS SQL server 2008 containing data of NVARCHAR type in multiple languages,
including asian characters. It is a known issue, that the PHP MSSQL functions are not able to retrieve
unicode data form NVARCHAR or NTEXT data fields.

I spent some time searching for possible solutions and finaly found a work arround, that provides correct
display of latin and asian fonts from a NVARCHAR field.

Do a SQL query, while you convert the NVARCHAR data first to VARBINARY and then to VARCHAR

SELECT
CONVERT(VARCHAR(MAX),CONVERT(VARBINARY(MAX),nvarchar_col)) AS x
FROM dbo.table

While you fetch the result set in PHP, use the iconv() function to convert the data to unicode

Now you can ouput the text to UTF-8 encoded page with the correct characters.

This workarround did run on IIS 6.0 with PHP 5.2.6 running as FastCGI.

Here is the changes required to connect MSSQL database using mssql_connect with long password (more than 30 chars)

Steps to follow:

1) cd /usr/local/src/freetds-0.91/

2) Change the values as required in freetds src:

# Default values:
# Filename: include/sybdb.h (line 67)
#define DBMAXNAME 30

# Filename: include/tds.h (line 760)
#define TDS_MAX_DYNID_LEN 30

# Filename: include/tds.h (line 831)
#define TDS_MAX_LOGIN_STR_SZ 30

3) Modify the TDS_MAX_LOGIN_STR_SZ macro to overcome the password limitation of 30 chars

4) Recompile the freetds

make clean && ./configure —prefix=/usr/local/freetds —with-tdsver=8.0 —enable-msdblib —enable-dbmfix —with-gnu-ld && make && make install

5) Restart the apache
/usr/local/apache2/bin/apachectl stop && /usr/local/apache2/bin/apachectl start

6) Export the FREETDS
export FREETDSCONF=/etc/freetds.conf

Test the MSSQLdatabase connection using CLI

> php -a
Interactive mode enabled

resource(1) of type (mssql link)

It appears ntwdblib.dll is no longer a part of SQL 2005. According to Microsoft the component is deprecated and they recommend using OLE DB or ODBC. The dll from SQL Server version 6.5, SQL Server 7.0, or SQL Server 2000 still works against 2005 if you have it.

From Microsoft’s site:

Although the SQL Server 2005 Database Engine still supports connections from existing applications using the DB-Library and Embedded SQL APIs, it does not include the files or documentation needed to do programming work on applications that use these APIs. A future version of the SQL Server Database Engine will drop support for connections from DB-Library or Embedded SQL applications. Do not use DB-Library or Embedded SQL to develop new applications. Remove any dependencies on either DB-Library or Embedded SQL when modifying existing applications. Instead of these APIs, use the SQLClient namespace or an API such as OLE DB or ODBC. SQL Server 2005 does not include the DB-Library DLL required to run these applications. To run DB-Library or Embedded SQL applications you must have available the DB-Library DLL from SQL Server version 6.5, SQL Server 7.0, or SQL Server 2000.

Another helpful hint in regards to SQL Server 2005 Express:

Make sure your SQL Server is set to «SQL Server and Windows Authentication mode». By default it is NOT.

1) Open «SQL Server Management Studio Express»
2) Right-click server («machinenamesqlexpress») and select «Properties».
3) Select «Security»
4) Select «SQL Server and Windows Authentication mode»
5) Restart SQL Server.

I’m running apache 1.3.26 and php 4.3.6 on a linux server (debian), and connecting to SQL Server 2000 via php4-mssql and Freetds.

I managed to get a connection to the SQL server, but found that when I used the function mssql_query() to pass in a Select statement containing datetime columns, I would get the following message in Internet Explorer — «The page cannot be displayed». When I removed the datetime column from the query, it worked fine, and returned a resultset.
Looked in the apache error.log file, and found the error «child pid xxxxxx exit signal segmentation fault».

After a lot of searching on the internet I stumbled upon an entry which was missing from my php.ini. I added the line «mssql.datetimeconvert = Off» to the MSSQL section of pphp.ini, restarted Apache, and the problem went away. Now I can select dates in SQL queries

If you get an error like:

PHP Warning: mssql_query(): message: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. (severity 16) in /var/www/html/query.php on line 29

There are two solutions: one solution involves casting the data types in the query, the other solution involves changing the version number free tds is using.

The first solution is mentioned all over the web and limits what you can return, the second solution will probably only be found right here.

Open up your free tds configuration file (/etc/freetds.conf), and change:

[global]
tds version = 4.2

[global]
tds version = 8.0

You don’t have to upgrade any packages, but by default, freetds tries to use an older version (if you installed freetds using yum or apt-get).

There is a PHP driver for SQL Server 2005+ from Microsoft. You can even download the source code.

Search for «SQL Server 2005 Driver for PHP» on MSDN, or try one of these links:

Windows 2000 Advanced Server
iis
PHP 5.2.5
SQL server Express

Could not connect using the following connect string:

$sqlconn = mssql_connect «localhost,1433», «user», «password»)

After 2 days of frustration and reinstalling PHP + SQLEXPRESS and trying EVERYTHING I could find via Google, I found a setting in PHP.INI that I never noticed.

ENABLE _dl = ON ———- I changed this to OFF

Problem went away and all is working as it used to on PHP4

Hope this helps others with the same problem

I was able to install and configure Freetds on CENTOS 4 following the guide lines mentioned in beliw mentioned URL

I advice everybody to follow the same

Microsoft SQL Server 2005 and Vista.

The following steps enabled MSSQL 2005 support on Vista Home Permium. (native drivers, not odbc which works out-of-the-box)

1) Place ntwdblib.dll in C:WindowsSystem32
2) Place php_mssql.dll in C:WindowsSystem32
(I gave IUSR full access to these files, maybe read is enough)

3) uncomment php_mssql.dll in php.ini

4) Changed my default SQLSERVER 2005 install so it accepts named piped. (Do this via start-> SQLServer2005->configuration tools->SQL SERVER surface area configuration.

After that I could use the mssql_* functions.

Hope that helps.

It can be download free of charge. Binaries are provided for Windows platform only.

Ссылка на основную публикацию
Adblock
detector