Я искал в сети и пока что увидел, что вы можете использовать mysql_
и mysqli_
вместе, что означает:
<?php
$con=mysqli_connect("localhost", "root" ,"" ,"mysql");
if( mysqli_connect_errno( $con ) ) {
echo "failed to connect";
}else{
echo "connected";
}
mysql_close($con);
echo "Done";
?>
или
<?php
$con=mysql_connect("localhost", "root" ,"" ,"mysql");
if( mysqli_connect_errno( $con ) ) {
echo "failed to connect";
}else{
echo "connected";
}
mysqli_close($con);
echo "Done";
?>
Действительны, но когда я использую этот код, я получаю следующее:
Connected
Warning: mysql_close() expects parameter 1 to be resource, object given in D:\************.php on line 9
Done
Для первого и того же кроме с mysqli_close()
. Для второго.
В чем проблема? Разве нельзя использовать mysql_
и mysqli
вместе? Или это нормально? Могу ли я проверить, действительны ли вообще соединения? (в if(mysq...)
)
mysql_*
вообще избегать использования функций. Они подвержены ошибкам и небезопасны, и вскоре будут удалены из PHP ( на данный момент они помечены как устаревшие ). [Этот замечательный ответ] [0] более подробно объясняет, почему они плохие. [0]: stackoverflow.com/a/12860046/1055295mysqli_*
функциями, а хороший - сmysql_*
ними. Но последняя категория помечена как устаревшая, поскольку это неполноценный набор функций, неспособный поддерживать вызовы в стиле объектно-ориентированного программирования или даже подготовленные операторы (это всего лишь два примера). Учитывая выбор из двух инструментов для выполнения одной и той же работы, один из которых явно лучше в долгосрочной перспективе и более гибкий, не очевиден ли правильный ответ?Ответы:
Нет, нельзя использовать
mysql
иmysqli
вместе. Это отдельные API, и ресурсы, которые они создают, несовместимы друг с другом.Существует
mysqli_close
, хотя.источник
Просто чтобы дать здесь общий ответ обо всех трех API MYSQL со ссылкой:
Вы не можете смешивать любой из трех (
mysql_*
,mysqli_*
,PDO
) MYSQL API, из PHP вместе, это просто не работает. Это даже в ручном FAQ :Вам необходимо использовать тот же MySQL API и связанные с ним функции, от подключения до запросов.
источник
mysql_real_escape_string()
с тем, что остальная часть их кода является PDO. Есть ли что-то, чего я не понял в свое время, работая с этими разными API? Я здесь невежественный? Это касается вопроса «теперь удален» stackoverflow.com/q/34209127, который могут просматривать только более 10 тыс. Участников, если кому-то интересно. Это в отношении$stmt3->execute(array('classID' => $_POST['class'],'studentID' => mysql_real_escape_string($substr)))
- Я что-то здесь упускаю?mysql_real_escape_string()
будет молча попытаться установить соединение с параметрами по умолчанию, которые затем сработали для OP. Итак, он просто установил соединение, чтобы получить набор символов. Итак, OP имеет 2 соединенияini_get()
. Так что это, вероятно, просто работает для OP с настройками по умолчанию. Я бы просто оставил это и выпил нового кофе (☕☕☕).sqlsrv_query()
. Я только что закрыл вопрос stackoverflow.com/q/41263771Технически вы можете использовать столько отдельных подключений, сколько хотите, в то время как ваша проблема вызвана простой опечаткой - вы не можете использовать ресурсы одного расширения с функциями другого, что совершенно очевидно.
Однако вам следует избегать множественных подключений из одного и того же скрипта , независимо от того, из одного API или из разных. Поскольку это будет обременять ваш сервер базы данных и истощать его ресурсы. Таким образом, хотя технически это возможно, вам не следует смешивать в коде разные расширения, за исключением короткого периода рефакторинга.
источник
MySQLi
намного безопаснее, чем тот,MySQL
который в любом случае устарел. Вот почему вы должны придерживаться,MySQLi
а также вы не можете смешивать их, поскольку они оба разные.источник